diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 19a6bdeb8..c42672d95 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index 129f5a0d8..46d25274c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -24,7 +24,7 @@ gradle.beforeProject { Project project -> //@formatter:off dependencyResolutionManagement.versionCatalogs.register('libs') { - version 'gradleutils', '3.4.5' + version 'gradleutils', '3.4.9' plugin 'licenser', 'net.minecraftforge.licenser' version '1.2.0' // https://plugins.gradle.org/plugin/net.minecraftforge.licenser plugin 'gradleutils', 'net.minecraftforge.gradleutils' versionRef 'gradleutils' diff --git a/src/main/java/net/minecraftforge/gradle/internal/ForgeGradleSharedData.java b/src/main/java/net/minecraftforge/gradle/internal/ForgeGradleSharedData.java index c0f6b98b6..b5da774fb 100644 --- a/src/main/java/net/minecraftforge/gradle/internal/ForgeGradleSharedData.java +++ b/src/main/java/net/minecraftforge/gradle/internal/ForgeGradleSharedData.java @@ -6,8 +6,10 @@ import org.jspecify.annotations.Nullable; +import java.io.Serializable; + record ForgeGradleSharedData( @Nullable MinecraftMappingsInternal mappings -) { +) implements Serializable { static final String NAME = "__fg_shared_data"; } diff --git a/src/main/java/net/minecraftforge/gradle/internal/MinecraftExtensionImpl.java b/src/main/java/net/minecraftforge/gradle/internal/MinecraftExtensionImpl.java index a447fa5e7..8c453d5e8 100644 --- a/src/main/java/net/minecraftforge/gradle/internal/MinecraftExtensionImpl.java +++ b/src/main/java/net/minecraftforge/gradle/internal/MinecraftExtensionImpl.java @@ -44,6 +44,7 @@ import org.gradle.api.tasks.TaskProvider; import org.gradle.jvm.toolchain.JavaLauncher; import org.gradle.plugins.ide.eclipse.model.EclipseModel; +import org.jspecify.annotations.Nullable; import javax.inject.Inject; import java.util.ArrayList; @@ -151,21 +152,25 @@ static abstract class ForSettingsImpl extends MinecraftExtensionImpl { @Inject public ForSettingsImpl(ForgeGradlePlugin plugin, Settings settings) { super(plugin); - settings.getGradle().settingsEvaluated(this::finish); + + // Add component rules, even if they aren't used + // RulesMode.PREFER_PROJECT && !projectRules.isEmpty() -> use projectRules + applyComponentRules(settings.getDependencyResolutionManagement().getComponents()); + + // Add shared data to each project before it is evaluated + var sharedData = new ForgeGradleSharedData( + this.getMappingsProperty().getOrNull() + ); + settings.getGradle().getLifecycle().beforeProject(project -> beforeProject(project, sharedData)); } - private void finish(Settings settings) { + // This has to be static for serialization / isolation purposes + private static void beforeProject(Project project, ForgeGradleSharedData sharedData) { // Attach shared data to Gradle instance (accessible to project) - settings.getGradle().getExtensions().add( + project.getExtensions().add( ForgeGradleSharedData.NAME, - new ForgeGradleSharedData( - this.getMappingsProperty().getOrNull() - ) + sharedData ); - - // Add component rules, even if they aren't used - // RulesMode.PREFER_PROJECT && !projectRules.isEmpty() -> use projectRules - applyComponentRules(settings.getDependencyResolutionManagement().getComponents()); } } @@ -214,7 +219,7 @@ public ForProjectImpl(ForgeGradlePlugin plugin) { }); } - var sharedData = getProject().getGradle().getExtensions().findByType(ForgeGradleSharedData.class); + var sharedData = getProject().getExtensions().findByType(ForgeGradleSharedData.class); if (sharedData != null) { this.getMappingsProperty().value(sharedData.mappings()); }