From e3cd4947bfde13ba7ad2abd0336d074c8a15ec69 Mon Sep 17 00:00:00 2001 From: modmuss Date: Sun, 9 Feb 2025 23:27:48 +0000 Subject: [PATCH] Remove loom bootstrap (#1261) * Remove bootstrap, its no longer required as Gradle has a nicer error message for outdated java. * No need to check idea or gradle version --- bootstrap/.gitignore | 7 -- bootstrap/build.gradle | 32 ------ .../loom/bootstrap/BootstrappedPlugin.java | 7 -- .../bootstrap/LoomGradlePluginBootstrap.java | 103 ------------------ bootstrap/test-project/build.gradle | 8 -- bootstrap/test-project/settings.gradle | 10 -- build.gradle | 29 +---- settings.gradle | 4 +- .../net/fabricmc/loom/LoomGradlePlugin.java | 11 +- 9 files changed, 8 insertions(+), 203 deletions(-) delete mode 100644 bootstrap/.gitignore delete mode 100644 bootstrap/build.gradle delete mode 100644 bootstrap/src/main/java/net/fabricmc/loom/bootstrap/BootstrappedPlugin.java delete mode 100644 bootstrap/src/main/java/net/fabricmc/loom/bootstrap/LoomGradlePluginBootstrap.java delete mode 100644 bootstrap/test-project/build.gradle delete mode 100644 bootstrap/test-project/settings.gradle diff --git a/bootstrap/.gitignore b/bootstrap/.gitignore deleted file mode 100644 index f8dc37c9..00000000 --- a/bootstrap/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Ignore everything -/* - -!/src -!/build.gradle -!/.gitignore -!/test-project \ No newline at end of file diff --git a/bootstrap/build.gradle b/bootstrap/build.gradle deleted file mode 100644 index 30b987a2..00000000 --- a/bootstrap/build.gradle +++ /dev/null @@ -1,32 +0,0 @@ -plugins { - id 'java' - id 'groovy' -} - -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -tasks.withType(JavaCompile).configureEach { - it.options.encoding = "UTF-8" - it.options.release = 8 -} - -repositories { - mavenCentral() -} - -dependencies { - implementation gradleApi() - - testImplementation(gradleTestKit()) - testImplementation('org.spockframework:spock-core:2.3-groovy-3.0') { - exclude module: 'groovy-all' - } -} - -test { - maxHeapSize = "4096m" - useJUnitPlatform() -} \ No newline at end of file diff --git a/bootstrap/src/main/java/net/fabricmc/loom/bootstrap/BootstrappedPlugin.java b/bootstrap/src/main/java/net/fabricmc/loom/bootstrap/BootstrappedPlugin.java deleted file mode 100644 index c64246ef..00000000 --- a/bootstrap/src/main/java/net/fabricmc/loom/bootstrap/BootstrappedPlugin.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.fabricmc.loom.bootstrap; - -import org.gradle.api.plugins.PluginAware; - -public interface BootstrappedPlugin { - void apply(PluginAware project); -} diff --git a/bootstrap/src/main/java/net/fabricmc/loom/bootstrap/LoomGradlePluginBootstrap.java b/bootstrap/src/main/java/net/fabricmc/loom/bootstrap/LoomGradlePluginBootstrap.java deleted file mode 100644 index 35113243..00000000 --- a/bootstrap/src/main/java/net/fabricmc/loom/bootstrap/LoomGradlePluginBootstrap.java +++ /dev/null @@ -1,103 +0,0 @@ -package net.fabricmc.loom.bootstrap; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -import org.gradle.api.JavaVersion; -import org.gradle.api.Plugin; -import org.gradle.api.Project; -import org.gradle.api.configuration.BuildFeatures; -import org.gradle.api.plugins.PluginAware; -import org.gradle.util.GradleVersion; - -/** - * This bootstrap is compiled against a minimal gradle API and java 8, this allows us to show a nice error to users who run on unsupported configurations. - */ -@SuppressWarnings("unused") -public abstract class LoomGradlePluginBootstrap implements Plugin { - private static final String MIN_SUPPORTED_GRADLE_VERSION = "8.12"; - private static final int MIN_SUPPORTED_MAJOR_JAVA_VERSION = 17; - private static final int MIN_SUPPORTED_MAJOR_IDEA_VERSION = 2022; - - private static final String PLUGIN_CLASS_NAME = "net.fabricmc.loom.LoomGradlePlugin"; - private static final String IDEA_VERSION_PROP_KEY = "idea.version"; - - @Inject - protected abstract BuildFeatures getBuildFeatures(); - - @Override - public void apply(PluginAware pluginAware) { - if (pluginAware instanceof Project) { - Project project = (Project) pluginAware; - - if (getBuildFeatures().getIsolatedProjects().getActive().get() || project.findProperty("fabric.loom.skip-env-validation") == null) { - validateEnvironment(); - } else { - project.getLogger().lifecycle("Loom environment validation disabled. Please re-enable before reporting any issues."); - } - } - - getActivePlugin().apply(pluginAware); - } - - private void validateEnvironment() { - List errors = new ArrayList<>(); - - if (!isValidGradleRuntime()) { - errors.add(String.format("You are using an outdated version of Gradle (%s). Gradle %s or higher is required.", GradleVersion.current().getVersion(), MIN_SUPPORTED_GRADLE_VERSION)); - } - - if (!isValidJavaRuntime()) { - errors.add(String.format("You are using an outdated version of Java (%s). Java %d or higher is required.", JavaVersion.current().getMajorVersion(), MIN_SUPPORTED_MAJOR_JAVA_VERSION)); - - if (Boolean.getBoolean("idea.active")) { - // Idea specific error - errors.add("You can change the Java version in the Gradle settings dialog."); - } else { - String javaHome = System.getenv("JAVA_HOME"); - - if (javaHome != null) { - errors.add(String.format("The JAVA_HOME environment variable is currently set to (%s).", javaHome)); - } - } - } - - if (!isValidIdeaRuntime()) { - errors.add(String.format("You are using an outdated version of intellij idea (%s). Intellij idea %d or higher is required.", System.getProperty(IDEA_VERSION_PROP_KEY), MIN_SUPPORTED_MAJOR_IDEA_VERSION)); - } - - if (!errors.isEmpty()) { - throw new UnsupportedOperationException(String.join("\n", errors)); - } - } - - private static boolean isValidJavaRuntime() { - // Note use compareTo to ensure compatibility with gradle < 6.0 - return JavaVersion.current().compareTo(JavaVersion.toVersion(MIN_SUPPORTED_MAJOR_JAVA_VERSION)) >= 0; - } - - private static boolean isValidGradleRuntime() { - return GradleVersion.current().compareTo(GradleVersion.version(MIN_SUPPORTED_GRADLE_VERSION)) >= 0; - } - - private static boolean isValidIdeaRuntime() { - String version = System.getProperty(IDEA_VERSION_PROP_KEY); - - if (version == null) { - return true; - } - - int ideaYear = Integer.parseInt(version.substring(0, version.indexOf("."))); - return ideaYear >= MIN_SUPPORTED_MAJOR_IDEA_VERSION; - } - - BootstrappedPlugin getActivePlugin() { - try { - return (BootstrappedPlugin) Class.forName(PLUGIN_CLASS_NAME).getConstructor().newInstance(); - } catch (Exception e) { - throw new RuntimeException("Failed to bootstrap loom", e); - } - } -} diff --git a/bootstrap/test-project/build.gradle b/bootstrap/test-project/build.gradle deleted file mode 100644 index 56191542..00000000 --- a/bootstrap/test-project/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -plugins { - id 'fabric-loom' version '0.13.local' -} - -dependencies { - minecraft "com.mojang:minecraft:1.16.5" - mappings loom.officialMojangMappings() -} \ No newline at end of file diff --git a/bootstrap/test-project/settings.gradle b/bootstrap/test-project/settings.gradle deleted file mode 100644 index 37a1b9e0..00000000 --- a/bootstrap/test-project/settings.gradle +++ /dev/null @@ -1,10 +0,0 @@ -pluginManagement { - repositories { - maven { - name = 'Fabric' - url = 'https://maven.fabricmc.net/' - } - gradlePluginPortal() - mavenLocal() - } -} diff --git a/build.gradle b/build.gradle index db58217e..1c1955be 100644 --- a/build.gradle +++ b/build.gradle @@ -54,15 +54,6 @@ repositories { mavenCentral() } -configurations { - bootstrap { - transitive = false - } - compileClasspath.extendsFrom bootstrap - runtimeClasspath.extendsFrom bootstrap - testRuntimeClasspath.extendsFrom bootstrap -} - configurations.configureEach { resolutionStrategy { failOnNonReproducibleResolution() @@ -101,8 +92,6 @@ sourceSets { dependencies { implementation gradleApi() - bootstrap project(":bootstrap") - // libraries implementation libs.commons.io implementation libs.gson @@ -180,7 +169,6 @@ jar { attributes 'Implementation-Version': project.version } - from configurations.bootstrap.collect { it.isDirectory() ? it : zipTree(it) } from sourceSets.commonDecompiler.output.classesDirs from sourceSets.cfr.output.classesDirs from sourceSets.fernflower.output.classesDirs @@ -249,7 +237,7 @@ gradlePlugin { plugins { fabricLoom { id = 'fabric-loom' - implementationClass = 'net.fabricmc.loom.bootstrap.LoomGradlePluginBootstrap' + implementationClass = 'net.fabricmc.loom.LoomGradlePlugin' } } } @@ -341,21 +329,6 @@ publishing { } } -// Need to tweak this file to pretend we are compatible with j8 so the bootstrap will run. -tasks.withType(GenerateModuleMetadata).configureEach { - doLast { - def file = outputFile.get().asFile - - def metadata = new groovy.json.JsonSlurper().parseText(file.text) - - metadata.variants.each { - it.attributes["org.gradle.jvm.version"] = 8 - } - - file.text = groovy.json.JsonOutput.toJson(metadata) - } -} - // A task to output a json file with a list of all the test to run tasks.register('writeActionsTestMatrix') { doLast { diff --git a/settings.gradle b/settings.gradle index 039a49da..6b14589d 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,6 +9,4 @@ dependencyResolutionManagement { from(files("gradle/runtime.libs.versions.toml")) } } -} - -include "bootstrap" \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java b/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java index 144c548f..b3cdf145 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java +++ b/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java @@ -1,7 +1,7 @@ /* * This file is part of fabric-loom, licensed under the MIT License (MIT). * - * Copyright (c) 2016-2023 FabricMC + * Copyright (c) 2016-2025 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 @@ -30,16 +30,16 @@ import java.util.Objects; import com.google.common.collect.ImmutableMap; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.plugins.PluginAware; import net.fabricmc.loom.api.LoomGradleExtensionAPI; import net.fabricmc.loom.api.fabricapi.FabricApiExtension; -import net.fabricmc.loom.bootstrap.BootstrappedPlugin; import net.fabricmc.loom.configuration.CompileConfiguration; -import net.fabricmc.loom.configuration.fabricapi.FabricApiExtensionImpl; import net.fabricmc.loom.configuration.LoomConfigurations; import net.fabricmc.loom.configuration.MavenPublication; +import net.fabricmc.loom.configuration.fabricapi.FabricApiExtensionImpl; import net.fabricmc.loom.configuration.ide.idea.IdeaConfiguration; import net.fabricmc.loom.configuration.sandbox.SandboxConfiguration; import net.fabricmc.loom.decompilers.DecompilerConfiguration; @@ -49,7 +49,7 @@ import net.fabricmc.loom.task.LoomTasks; import net.fabricmc.loom.task.RemapTaskConfiguration; import net.fabricmc.loom.util.LibraryLocationLogger; -public class LoomGradlePlugin implements BootstrappedPlugin { +public class LoomGradlePlugin implements Plugin { public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); public static final String LOOM_VERSION = Objects.requireNonNullElse(LoomGradlePlugin.class.getPackage().getImplementationVersion(), "0.0.0+unknown"); @@ -76,8 +76,9 @@ public class LoomGradlePlugin implements BootstrappedPlugin { } } - public void apply(Project project) { + private void apply(Project project) { project.getLogger().lifecycle("Fabric Loom: " + LOOM_VERSION); + LibraryLocationLogger.logLibraryVersions(); // Apply default plugins