diff --git a/build.gradle b/build.gradle
index c3699421..4e93d6fc 100644
--- a/build.gradle
+++ b/build.gradle
@@ -114,7 +114,6 @@ dependencies {
// source code remapping
implementation ('dev.architectury:mercury:0.1.1.11')
-
// Kotlin
implementation('org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.4.2') {
transitive = false
diff --git a/src/main/java/net/fabricmc/loom/api/ModSettings.java b/src/main/java/net/fabricmc/loom/api/ModSettings.java
index ebe53ac2..f52546ca 100644
--- a/src/main/java/net/fabricmc/loom/api/ModSettings.java
+++ b/src/main/java/net/fabricmc/loom/api/ModSettings.java
@@ -28,6 +28,8 @@ import javax.inject.Inject;
import org.gradle.api.Named;
import org.gradle.api.Project;
+import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.artifacts.Dependency;
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.tasks.SourceSet;
@@ -77,6 +79,23 @@ public abstract class ModSettings implements Named {
getModSourceSets().add(new SourceSetReference(sourceSet, project));
}
+ /**
+ * Add a number of {@link Dependency} to the mod's classpath group. Should be used to include all dependencies that are shaded into your mod.
+ *
+ *
Uses a detached configuration.
+ */
+ public void dependency(Dependency... dependencies) {
+ Configuration detachedConfiguration = getProject().getConfigurations().detachedConfiguration(dependencies);
+ configuration(detachedConfiguration);
+ }
+
+ /**
+ * Add a {@link Configuration} to the mod's classpath group. Should be used to include all dependencies that are shaded into your mod.
+ */
+ public void configuration(Configuration configuration) {
+ getModFiles().from(configuration);
+ }
+
/**
* List of classpath directories, used to populate the `fabric.classPathGroups` Fabric Loader system property.
* Use the {@link ModSettings#sourceSet} methods to add to this.
diff --git a/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java b/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java
index d12adad9..a8175582 100644
--- a/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java
+++ b/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java
@@ -107,7 +107,7 @@ public class ModProcessor {
// Check all the mods we expect exist
for (ModDependencyInfo info : processList) {
if (!info.getRemappedOutput().exists()) {
- throw new RuntimeException("Failed to find remapped mod" + info);
+ throw new RuntimeException("Failed to find remapped mod: " + info);
}
}
}
diff --git a/src/main/java/net/fabricmc/loom/task/service/SourceRemapperService.java b/src/main/java/net/fabricmc/loom/task/service/SourceRemapperService.java
index 45d2db00..30b1ea0f 100644
--- a/src/main/java/net/fabricmc/loom/task/service/SourceRemapperService.java
+++ b/src/main/java/net/fabricmc/loom/task/service/SourceRemapperService.java
@@ -1,7 +1,7 @@
/*
* This file is part of fabric-loom, licensed under the MIT License (MIT).
*
- * Copyright (c) 2021 FabricMC
+ * Copyright (c) 2021-2022 FabricMC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -42,6 +42,7 @@ import org.slf4j.LoggerFactory;
import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.task.RemapSourcesJarTask;
+import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.DeletingFileVisitor;
import net.fabricmc.loom.util.FileSystemUtil;
import net.fabricmc.loom.util.SourceRemapper;
@@ -122,6 +123,7 @@ public final class SourceRemapperService implements SharedService {
private Mercury createMercury() {
var mercury = new Mercury();
mercury.setGracefulClasspathChecks(true);
+ mercury.setSourceCompatibility(Constants.MERCURY_SOURCE_VERSION);
try {
mercury.getProcessors().add(MercuryRemapper.create(getMappings()));
diff --git a/src/main/java/net/fabricmc/loom/util/Constants.java b/src/main/java/net/fabricmc/loom/util/Constants.java
index 7b69784f..b882422a 100644
--- a/src/main/java/net/fabricmc/loom/util/Constants.java
+++ b/src/main/java/net/fabricmc/loom/util/Constants.java
@@ -27,6 +27,7 @@ package net.fabricmc.loom.util;
import java.util.List;
import com.google.common.collect.ImmutableList;
+import org.eclipse.jdt.core.JavaCore;
import org.gradle.api.plugins.JavaPlugin;
import org.objectweb.asm.Opcodes;
@@ -42,6 +43,7 @@ public class Constants {
public static final String FABRIC_REPOSITORY = "https://maven.fabricmc.net/";
public static final int ASM_VERSION = Opcodes.ASM9;
+ public static final String MERCURY_SOURCE_VERSION = JavaCore.VERSION_17;
public static final List MOD_COMPILE_ENTRIES = ImmutableList.of(
new RemappedConfigurationEntry("modApi", JavaPlugin.API_CONFIGURATION_NAME, true, true, PublishingMode.COMPILE_AND_RUNTIME),
diff --git a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java
index b8342009..258299e4 100644
--- a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java
+++ b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java
@@ -1,7 +1,7 @@
/*
* This file is part of fabric-loom, licensed under the MIT License (MIT).
*
- * Copyright (c) 2018-2021 FabricMC
+ * Copyright (c) 2018-2022 FabricMC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -247,6 +247,7 @@ public class SourceRemapper {
public static Mercury createMercuryWithClassPath(Project project, boolean toNamed) {
Mercury m = new Mercury();
m.setGracefulClasspathChecks(true);
+ m.setSourceCompatibility(Constants.MERCURY_SOURCE_VERSION);
for (File file : project.getConfigurations().getByName(Constants.Configurations.LOADER_DEPENDENCIES).getFiles()) {
m.getClassPath().add(file.toPath());
diff --git a/src/main/java/net/fabricmc/loom/util/kotlin/KotlinPluginUtils.java b/src/main/java/net/fabricmc/loom/util/kotlin/KotlinPluginUtils.java
index b0e7aaf8..367a947b 100644
--- a/src/main/java/net/fabricmc/loom/util/kotlin/KotlinPluginUtils.java
+++ b/src/main/java/net/fabricmc/loom/util/kotlin/KotlinPluginUtils.java
@@ -24,19 +24,34 @@
package net.fabricmc.loom.util.kotlin;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import kotlinx.metadata.jvm.KotlinClassMetadata;
import org.gradle.api.Project;
public class KotlinPluginUtils {
private static final String KOTLIN_PLUGIN_ID = "org.jetbrains.kotlin.jvm";
+ private static final Pattern VERSION_PATTERN = Pattern.compile("\\((.*?)\\)");
public static boolean hasKotlinPlugin(Project project) {
return project.getPluginManager().hasPlugin(KOTLIN_PLUGIN_ID);
}
public static String getKotlinPluginVersion(Project project) {
- Class> koltinPluginClass = project.getPlugins().getPlugin(KOTLIN_PLUGIN_ID).getClass();
- return koltinPluginClass.getPackage().getImplementationVersion().split("-")[0];
+ final Class> kotlinPluginClass = project.getPlugins().getPlugin(KOTLIN_PLUGIN_ID).getClass();
+ /*
+ 1.7.0-RC-release-217(1.7.0-RC)
+ 1.6.21-release-334(1.6.21)
+ */
+ final String implVersion = kotlinPluginClass.getPackage().getImplementationVersion();
+ final Matcher matcher = VERSION_PATTERN.matcher(implVersion);
+
+ if (!matcher.find()) {
+ throw new IllegalStateException("Unable to match Kotlin version from: " + implVersion);
+ }
+
+ return matcher.group(1);
}
public static String getKotlinMetadataVersion() {
diff --git a/src/main/java/net/fabricmc/loom/util/kotlin/KotlinRemapperClassloader.java b/src/main/java/net/fabricmc/loom/util/kotlin/KotlinRemapperClassloader.java
index a90ada6e..e43fdcf1 100644
--- a/src/main/java/net/fabricmc/loom/util/kotlin/KotlinRemapperClassloader.java
+++ b/src/main/java/net/fabricmc/loom/util/kotlin/KotlinRemapperClassloader.java
@@ -34,7 +34,7 @@ import net.fabricmc.loom.LoomGradlePlugin;
import net.fabricmc.loom.kotlin.remapping.KotlinMetadataTinyRemapperExtensionImpl;
/**
- * Used to run the Kotlin remapper with a specific version of Koltin that may not match the kotlin version included with gradle.
+ * Used to run the Kotlin remapper with a specific version of Kotlin that may not match the kotlin version included with gradle.
*/
public class KotlinRemapperClassloader extends URLClassLoader {
// Packages that should be loaded from the gradle plugin classloader.
diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/SplitProjectTest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/SplitProjectTest.groovy
index b7440833..a81f753b 100644
--- a/src/test/groovy/net/fabricmc/loom/test/integration/SplitProjectTest.groovy
+++ b/src/test/groovy/net/fabricmc/loom/test/integration/SplitProjectTest.groovy
@@ -38,7 +38,7 @@ class SplitProjectTest extends Specification implements GradleProjectTestTrait {
def gradle = gradleProject(project: "splitSources", version: version)
when:
- def result = gradle.run(task: "build")
+ def result = gradle.run(tasks: ["build", "generateDLIConfig"])
then:
result.task(":build").outcome == SUCCESS
diff --git a/src/test/groovy/net/fabricmc/loom/test/unit/kotlin/KotlinRemapperClassloaderTest.groovy b/src/test/groovy/net/fabricmc/loom/test/unit/kotlin/KotlinRemapperClassloaderTest.groovy
index 8851b012..4a87f5c6 100644
--- a/src/test/groovy/net/fabricmc/loom/test/unit/kotlin/KotlinRemapperClassloaderTest.groovy
+++ b/src/test/groovy/net/fabricmc/loom/test/unit/kotlin/KotlinRemapperClassloaderTest.groovy
@@ -40,7 +40,7 @@ class KotlinRemapperClassloaderTest extends Specification {
private static String KOTLIN_URL = "https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/${KOTLIN_VERSION}/kotlin-stdlib-${KOTLIN_VERSION}.jar"
private static String KOTLIN_METADATA_URL = "https://repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-metadata-jvm/${KOTLIN_METADATA_VERSION}/kotlinx-metadata-jvm-${KOTLIN_METADATA_VERSION}.jar"
- def "Test Koltin Remapper Classloader"() {
+ def "Test Kotlin Remapper Classloader"() {
given:
def classLoader = KotlinRemapperClassloader.create(new TestKotlinClasspath())
def mockTrClass = Mock(TrClass)
diff --git a/src/test/resources/projects/splitSources/build.gradle b/src/test/resources/projects/splitSources/build.gradle
index 810c6d2f..1011da2f 100644
--- a/src/test/resources/projects/splitSources/build.gradle
+++ b/src/test/resources/projects/splitSources/build.gradle
@@ -6,8 +6,21 @@ plugins {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
+configurations {
+ shade
+}
+
loom {
splitEnvironmentSourceSets()
+
+ mods {
+ modid {
+ sourceSet sourceSets.main
+ sourceSet sourceSets.client
+
+ configuration configurations.shade
+ }
+ }
}
dependencies {
@@ -16,6 +29,8 @@ dependencies {
modImplementation "net.fabricmc:fabric-loader:0.13.3"
modImplementation "net.fabricmc.fabric-api:fabric-api:0.47.8+1.18.2"
+
+ shade "com.googlecode.json-simple:json-simple:1.1.1"
}
tasks.withType(JavaCompile).configureEach {