Remove log4j from compile classpath starting with Minecraft 22w03a.
This is done to force modders to use SLF4J as Mojang have the ability to remove it at anytime. An option is provided to disable this.dev/0.11
parent
54bf5480b7
commit
b31ce4e525
|
@ -152,4 +152,6 @@ public interface LoomGradleExtensionAPI {
|
|||
default void splitMinecraftJar() {
|
||||
getMinecraftJarConfiguration().set(MinecraftJarConfiguration.SPLIT);
|
||||
}
|
||||
|
||||
Property<Boolean> getRuntimeOnlyLog4j();
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ public final class CompileConfiguration {
|
|||
extension.createLazyConfiguration(Constants.Configurations.MOD_COMPILE_CLASSPATH_MAPPED, configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT_NAMED, configuration -> configuration.setTransitive(false)); // The launchers do not recurse dependencies
|
||||
NamedDomainObjectProvider<Configuration> serverDeps = extension.createLazyConfiguration(Constants.Configurations.MINECRAFT_SERVER_DEPENDENCIES, configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT_RUNTIME_DEPENDENCIES, configuration -> configuration.setTransitive(false));
|
||||
extension.createLazyConfiguration(Constants.Configurations.MINECRAFT_DEPENDENCIES, configuration -> {
|
||||
configuration.extendsFrom(serverDeps.get());
|
||||
configuration.setTransitive(false);
|
||||
|
@ -126,6 +127,8 @@ public final class CompileConfiguration {
|
|||
extendsFrom(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES, project);
|
||||
extendsFrom(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES, project);
|
||||
|
||||
extendsFrom(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, Constants.Configurations.MINECRAFT_RUNTIME_DEPENDENCIES, project);
|
||||
|
||||
// Add the dev time dependencies
|
||||
project.getDependencies().add(Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES, Constants.Dependencies.DEV_LAUNCH_INJECTOR + Constants.Dependencies.Versions.DEV_LAUNCH_INJECTOR);
|
||||
project.getDependencies().add(Constants.Configurations.LOOM_DEVELOPMENT_DEPENDENCIES, Constants.Dependencies.TERMINAL_CONSOLE_APPENDER + Constants.Dependencies.Versions.TERMINAL_CONSOLE_APPENDER);
|
||||
|
|
|
@ -38,9 +38,11 @@ public class MinecraftLibraryProvider {
|
|||
private static final Pattern NATIVES_PATTERN = Pattern.compile("^(?<group>.*)/(.*?)/(?<version>.*)/((?<name>.*?)-([0-9].*?)-)(?<classifier>.*).jar$");
|
||||
|
||||
public void provide(MinecraftProvider minecraftProvider, Project project) {
|
||||
final MinecraftJarConfiguration jarConfiguration = LoomGradleExtension.get(project).getMinecraftJarConfiguration().get();
|
||||
final LoomGradleExtension extension = LoomGradleExtension.get(project);
|
||||
final MinecraftJarConfiguration jarConfiguration = extension.getMinecraftJarConfiguration().get();
|
||||
final MinecraftVersionMeta versionInfo = minecraftProvider.getVersionInfo();
|
||||
final BundleMetadata serverBundleMetadata = minecraftProvider.getServerBundleMetadata();
|
||||
final boolean runtimeOnlyLog4j = versionInfo.isVersionOrNewer(Constants.MinecraftReleaseTimes.MC_20W03A) && extension.getRuntimeOnlyLog4j().get();
|
||||
|
||||
final boolean overrideLWJGL = LWJGLVersionOverride.overrideByDefault() || LWJGLVersionOverride.forceOverride(project) || Boolean.getBoolean("loom.test.lwjgloverride");
|
||||
|
||||
|
@ -54,11 +56,16 @@ public class MinecraftLibraryProvider {
|
|||
}
|
||||
|
||||
if (library.isValidForOS() && !library.hasNatives() && library.artifact() != null) {
|
||||
if (serverBundleMetadata != null && isLibraryInBundle(serverBundleMetadata, library)) {
|
||||
if (runtimeOnlyLog4j && library.name().startsWith("org.apache.logging.log4j")) {
|
||||
// Make log4j a runtime only dep in 20w03a or later. Modders should use SLF4J.
|
||||
project.getDependencies().add(Constants.Configurations.MINECRAFT_RUNTIME_DEPENDENCIES, library.name());
|
||||
} else if (serverBundleMetadata != null && isLibraryInBundle(serverBundleMetadata, library)) {
|
||||
project.getDependencies().add(Constants.Configurations.MINECRAFT_SERVER_DEPENDENCIES, library.name());
|
||||
} else if (jarConfiguration.getSupportedEnvironments().contains("client")) {
|
||||
// Client only library, or legacy version
|
||||
project.getDependencies().add(Constants.Configurations.MINECRAFT_DEPENDENCIES, library.name());
|
||||
} else {
|
||||
throw new RuntimeException("Library %s was not added to a configuration".formatted(library.name()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -51,6 +51,10 @@ public record MinecraftVersionMeta(
|
|||
return downloads().get(key);
|
||||
}
|
||||
|
||||
public boolean isVersionOrNewer(String releaseTime) {
|
||||
return this.releaseTime().compareTo(releaseTime) >= 0;
|
||||
}
|
||||
|
||||
public record AssetIndex(String id, long totalSize, String path, String sha1, long size, String url) {
|
||||
public String fabricId(String version) {
|
||||
return id.equals(version) ? version : version + "-" + id;
|
||||
|
|
|
@ -63,6 +63,7 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
|||
protected final Property<Boolean> transitiveAccessWideners;
|
||||
protected final Property<String> intermediary;
|
||||
protected final Property<Boolean> enableInterfaceInjection;
|
||||
private final Property<Boolean> runtimeOnlyLog4j;
|
||||
private final Property<MinecraftJarConfiguration> minecraftJarConfiguration;
|
||||
|
||||
private final ModVersionParser versionParser;
|
||||
|
@ -104,6 +105,9 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
|||
|
||||
this.accessWidener.finalizeValueOnRead();
|
||||
this.getGameJarProcessors().finalizeValueOnRead();
|
||||
|
||||
this.runtimeOnlyLog4j = project.getObjects().property(Boolean.class).convention(true);
|
||||
this.runtimeOnlyLog4j.finalizeValueOnRead();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -213,6 +217,11 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
|||
return minecraftJarConfiguration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Property<Boolean> getRuntimeOnlyLog4j() {
|
||||
return runtimeOnlyLog4j;
|
||||
}
|
||||
|
||||
// This is here to ensure that LoomGradleExtensionApiImpl compiles without any unimplemented methods
|
||||
private final class EnsureCompile extends LoomGradleExtensionApiImpl {
|
||||
private EnsureCompile() {
|
||||
|
|
|
@ -68,6 +68,7 @@ public class Constants {
|
|||
*/
|
||||
public static final String MINECRAFT_SERVER_DEPENDENCIES = "minecraftServerLibraries";
|
||||
public static final String MINECRAFT_DEPENDENCIES = "minecraftLibraries";
|
||||
public static final String MINECRAFT_RUNTIME_DEPENDENCIES = "minecraftRuntimeOnlyLibraries";
|
||||
public static final String MINECRAFT_NATIVES = "minecraftNatives";
|
||||
public static final String MINECRAFT_NAMED = "minecraftNamed";
|
||||
public static final String MAPPINGS = "mappings";
|
||||
|
@ -141,4 +142,8 @@ public class Constants {
|
|||
private TaskGroup() {
|
||||
}
|
||||
}
|
||||
|
||||
public static final class MinecraftReleaseTimes {
|
||||
public static final String MC_20W03A = "2022-01-19T16:04:59+00:00";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -107,10 +107,12 @@ trait GradleProjectTestTrait {
|
|||
throw new FileNotFoundException("Failed to find project directory at: $projectSourceDir.absolutePath")
|
||||
}
|
||||
|
||||
def settingsGradle = new File(projectDir, "settings.gradle")
|
||||
|
||||
// Cleanup some basic things if they already exists
|
||||
new File(projectDir, "src").deleteDir()
|
||||
new File(projectDir, "build.gradle").delete()
|
||||
new File(projectDir, "settings.gradle").delete()
|
||||
settingsGradle.delete()
|
||||
|
||||
projectSourceDir.eachFileRecurse { file ->
|
||||
if (file.isDirectory()) {
|
||||
|
@ -128,6 +130,10 @@ trait GradleProjectTestTrait {
|
|||
tempFile.parentFile.mkdirs()
|
||||
tempFile.bytes = file.bytes
|
||||
}
|
||||
|
||||
if (!settingsGradle.exists()) {
|
||||
settingsGradle.createNewFile()
|
||||
}
|
||||
}
|
||||
|
||||
@Immutable
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
package net.fabricmc.example;
|
||||
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
public class ExampleMod implements ModInitializer {
|
||||
public static final Logger LOGGER = LogManager.getLogger("modid");
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
// This code runs as soon as Minecraft is in a mod-load-ready state.
|
||||
// However, some things (like resources) may still be uninitialized.
|
||||
// Proceed with mild caution.
|
||||
|
||||
System.out.println("Hello simple Fabric mod");
|
||||
LOGGER.info("Hello Fabric world!");
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue