Disable remap classpath system prop (#1426)

* Disable remap classpath system prop

* Fix build
This commit is contained in:
modmuss
2025-11-07 22:07:13 +00:00
committed by GitHub
parent ec00261136
commit 43e1ad7b31
3 changed files with 88 additions and 56 deletions

View File

@@ -25,6 +25,7 @@
package net.fabricmc.loom.task;
import java.io.File;
import java.util.Objects;
import javax.inject.Inject;
@@ -36,6 +37,7 @@ import org.gradle.api.tasks.Sync;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.TaskOutputs;
import org.gradle.api.tasks.TaskProvider;
import org.jetbrains.annotations.Nullable;
import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
@@ -60,6 +62,82 @@ public abstract class LoomTasks implements Runnable {
@Override
public void run() {
LoomGradleExtension extension = LoomGradleExtension.get(getProject());
if (!extension.disableObfuscation()) {
registerMigrateMappingsTasks();
}
var generateLog4jConfig = getTasks().register("generateLog4jConfig", GenerateLog4jConfigTask.class, t -> {
t.setDescription("Generate the log4j config file");
});
@Nullable TaskProvider<GenerateRemapClasspathTask> generateRemapClasspath = null;
if (!extension.disableObfuscation()) {
generateRemapClasspath = getTasks().register("generateRemapClasspath", GenerateRemapClasspathTask.class, t -> {
t.setDescription("Generate the remap classpath file");
});
}
// Make the lambda happy
final @Nullable TaskProvider<GenerateRemapClasspathTask> generateRemapClasspathTask = generateRemapClasspath;
getTasks().register("generateDLIConfig", GenerateDLIConfigTask.class, t -> {
t.setDescription("Generate the DevLaunchInjector config file");
// Must allow these IDE files to be generated first
t.mustRunAfter("eclipse");
t.dependsOn(generateLog4jConfig);
if (!extension.disableObfuscation()) {
GenerateRemapClasspathTask remapClasspath = Objects.requireNonNull(generateRemapClasspathTask.get());
t.getRemapClasspathFile().set(remapClasspath.getRemapClasspathFile());
}
});
getTasks().register("configureLaunch", task -> {
task.dependsOn(getTasks().named("generateDLIConfig"));
task.dependsOn(getTasks().named("generateLog4jConfig"));
if (!extension.disableObfuscation()) {
task.dependsOn(getTasks().named("generateRemapClasspath"));
}
task.setDescription("Setup the required files to launch Minecraft");
task.setGroup(Constants.TaskGroup.FABRIC);
});
TaskProvider<ValidateAccessWidenerTask> validateAccessWidener = getTasks().register("validateAccessWidener", ValidateAccessWidenerTask.class, t -> {
t.setDescription("Validate all the rules in the access widener against the Minecraft jar");
t.setGroup("verification");
});
getTasks().named("check").configure(task -> task.dependsOn(validateAccessWidener));
registerIDETasks();
registerRunTasks();
// Must be done in afterEvaluate to allow time for the build script to configure the jar config.
GradleUtils.afterSuccessfulEvaluation(getProject(), () -> {
if (extension.getMinecraftJarConfiguration().get() == MinecraftJarConfiguration.SERVER_ONLY) {
// Server only, nothing more to do.
return;
}
final MinecraftVersionMeta versionInfo = extension.getMinecraftProvider().getVersionInfo();
if (versionInfo == null) {
// Something has gone wrong, don't register the task.
return;
}
registerClientSetupTasks(getTasks(), versionInfo.hasNativesToExtract());
});
}
private void registerMigrateMappingsTasks() {
SourceSetHelper.getSourceSets(getProject()).all(sourceSet -> {
if (SourceSetHelper.isMainSourceSet(sourceSet)) {
getTasks().register("migrateMappings", MigrateMappingsTask.class, t -> {
@@ -83,60 +161,6 @@ public abstract class LoomTasks implements Runnable {
getTasks().register("migrateClassTweakerMappings", MigrateClassTweakerMappingsTask.class, t -> {
t.setDescription("Migrates access widener and class tweaker mappings to a new version.");
});
var generateLog4jConfig = getTasks().register("generateLog4jConfig", GenerateLog4jConfigTask.class, t -> {
t.setDescription("Generate the log4j config file");
});
var generateRemapClasspath = getTasks().register("generateRemapClasspath", GenerateRemapClasspathTask.class, t -> {
t.setDescription("Generate the remap classpath file");
});
getTasks().register("generateDLIConfig", GenerateDLIConfigTask.class, t -> {
t.setDescription("Generate the DevLaunchInjector config file");
// Must allow these IDE files to be generated first
t.mustRunAfter("eclipse");
t.dependsOn(generateLog4jConfig);
t.getRemapClasspathFile().set(generateRemapClasspath.get().getRemapClasspathFile());
});
getTasks().register("configureLaunch", task -> {
task.dependsOn(getTasks().named("generateDLIConfig"));
task.dependsOn(getTasks().named("generateLog4jConfig"));
task.dependsOn(getTasks().named("generateRemapClasspath"));
task.setDescription("Setup the required files to launch Minecraft");
task.setGroup(Constants.TaskGroup.FABRIC);
});
TaskProvider<ValidateAccessWidenerTask> validateAccessWidener = getTasks().register("validateAccessWidener", ValidateAccessWidenerTask.class, t -> {
t.setDescription("Validate all the rules in the access widener against the Minecraft jar");
t.setGroup("verification");
});
getTasks().named("check").configure(task -> task.dependsOn(validateAccessWidener));
registerIDETasks();
registerRunTasks();
// Must be done in afterEvaluate to allow time for the build script to configure the jar config.
GradleUtils.afterSuccessfulEvaluation(getProject(), () -> {
LoomGradleExtension extension = LoomGradleExtension.get(getProject());
if (extension.getMinecraftJarConfiguration().get() == MinecraftJarConfiguration.SERVER_ONLY) {
// Server only, nothing more to do.
return;
}
final MinecraftVersionMeta versionInfo = extension.getMinecraftProvider().getVersionInfo();
if (versionInfo == null) {
// Something has gone wrong, don't register the task.
return;
}
registerClientSetupTasks(getTasks(), versionInfo.hasNativesToExtract());
});
}
private void registerIDETasks() {

View File

@@ -89,6 +89,7 @@ public abstract class GenerateDLIConfigTask extends AbstractLoomTask {
protected abstract Property<String> getNativesDirectoryPath();
@InputFile
@Optional
public abstract RegularFileProperty getRemapClasspathFile();
@OutputFile
@@ -128,7 +129,6 @@ public abstract class GenerateDLIConfigTask extends AbstractLoomTask {
final LaunchConfig launchConfig = new LaunchConfig()
.property("fabric.development", "true")
.property("fabric.remapClasspathFile", getRemapClasspathFile().get().getAsFile().getAbsolutePath())
.property("log4j.configurationFile", getLog4jConfigPaths().get())
.property("log4j2.formatMsgNoLookups", "true")
@@ -137,6 +137,10 @@ public abstract class GenerateDLIConfigTask extends AbstractLoomTask {
.argument("client", "--assetsDir")
.argument("client", assetsDirectory.getAbsolutePath());
if (getRemapClasspathFile().isPresent()) {
launchConfig.property("fabric.remapClasspathFile", getRemapClasspathFile().get().getAsFile().getAbsolutePath());
}
if (versionInfo.hasNativesToExtract()) {
String nativesPath = getNativesDirectoryPath().get();

View File

@@ -62,9 +62,13 @@ class SimpleDebofTest extends Specification implements GradleProjectTestTrait {
sourceFile.text = src
when:
def result = gradle.run(task: "build")
def result = gradle.run(tasks: [
"build",
"configureClientLaunch"
])
then:
result.task(":build").outcome == SUCCESS
result.task(":configureClientLaunch").outcome == SUCCESS
}
}