From 4ddd8fe9dee299437f9931e8e981d5fc8717fb77 Mon Sep 17 00:00:00 2001 From: JFronny Date: Fri, 7 Oct 2022 19:05:03 +0200 Subject: [PATCH] Better solution for loom dependencies --- .../jfronny/scripts/EarlyAfterEvaluateExt.kt | 9 +++++ .../io/gitlab/jfronny/scripts/SharedProps.kt | 8 ++--- .../kotlin/jf.earlyafterevaluate.gradle.kts | 12 +++++++ .../io/gitlab/jfronny/scripts/LoomExt.kt | 13 -------- lom/src/main/kotlin/lom.gradle.kts | 33 +++++++++---------- 5 files changed, 41 insertions(+), 34 deletions(-) create mode 100644 convention/src/main/kotlin/io/gitlab/jfronny/scripts/EarlyAfterEvaluateExt.kt create mode 100644 convention/src/main/kotlin/jf.earlyafterevaluate.gradle.kts diff --git a/convention/src/main/kotlin/io/gitlab/jfronny/scripts/EarlyAfterEvaluateExt.kt b/convention/src/main/kotlin/io/gitlab/jfronny/scripts/EarlyAfterEvaluateExt.kt new file mode 100644 index 0000000..280db92 --- /dev/null +++ b/convention/src/main/kotlin/io/gitlab/jfronny/scripts/EarlyAfterEvaluateExt.kt @@ -0,0 +1,9 @@ +package io.gitlab.jfronny.scripts + +import org.gradle.api.Action +import org.gradle.api.Project +import org.gradle.kotlin.dsl.extra + +fun Project.earlyAfterEvaluate(action: Action) { + (extra["earlyAfterEvaluates"] as MutableList>).add(action) +} \ No newline at end of file diff --git a/convention/src/main/kotlin/io/gitlab/jfronny/scripts/SharedProps.kt b/convention/src/main/kotlin/io/gitlab/jfronny/scripts/SharedProps.kt index 97a5b69..feb1d58 100644 --- a/convention/src/main/kotlin/io/gitlab/jfronny/scripts/SharedProps.kt +++ b/convention/src/main/kotlin/io/gitlab/jfronny/scripts/SharedProps.kt @@ -14,12 +14,12 @@ var Project.versionS: String } var Project.versionType: VersionType - get() = if (extra.has("io.gitlab.jfronny.scripts.getVersionType")) extra["io.gitlab.jfronny.scripts.getVersionType"] as VersionType else VersionType.RELEASE - set(value) = extra.set("io.gitlab.jfronny.scripts.getVersionType", value) + get() = if (extra.has("versionType")) extra["versionType"] as VersionType else VersionType.RELEASE + set(value) = extra.set("versionType", value) var Project.changelog: String - get() = if (extra.has("io.gitlab.jfronny.scripts.getChangelog")) extra["io.gitlab.jfronny.scripts.getChangelog"].toString() else "" - set(value) = extra.set("io.gitlab.jfronny.scripts.getChangelog", value) + get() = if (extra.has("changelog")) extra["changelog"].toString() else "" + set(value) = extra.set("changelog", value) val TaskContainer.deployDebug: Task get() = findByName("deployDebug") ?: register("deployDebug").get().dependsOn(named("build").get()) val TaskContainer.deployRelease: Task get() = findByName("deployRelease") ?: register("deployRelease").get().dependsOn(deployDebug) \ No newline at end of file diff --git a/convention/src/main/kotlin/jf.earlyafterevaluate.gradle.kts b/convention/src/main/kotlin/jf.earlyafterevaluate.gradle.kts new file mode 100644 index 0000000..c4044a5 --- /dev/null +++ b/convention/src/main/kotlin/jf.earlyafterevaluate.gradle.kts @@ -0,0 +1,12 @@ +import org.gradle.api.Action +import org.gradle.api.Project +import org.gradle.kotlin.dsl.extra + +extra["earlyAfterEvaluates"] = ArrayList>() + +afterEvaluate { + (extra["earlyAfterEvaluates"] as List>).forEach { + it.execute(this) + } + extra["earlyAfterEvaluates"] = null +} \ No newline at end of file diff --git a/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LoomExt.kt b/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LoomExt.kt index 0532d98..37cb84b 100644 --- a/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LoomExt.kt +++ b/lom/src/main/kotlin/io/gitlab/jfronny/scripts/LoomExt.kt @@ -1,32 +1,19 @@ package io.gitlab.jfronny.scripts -import net.fabricmc.loom.LoomGradleExtension -import net.fabricmc.loom.api.LoomGradleExtensionAPI -import net.fabricmc.loom.task.RemapJarTask import net.fabricmc.loom.task.UnpickJarTask -import org.gradle.api.Action import org.gradle.api.DefaultTask -import org.gradle.api.Project import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSetContainer import org.gradle.api.tasks.TaskContainer import org.gradle.kotlin.dsl.named -val Project.loom: LoomGradleExtensionAPI get() = LoomGradleExtension.get(this) -fun Project.loom(configure: Action) = extensions.configure("loom", configure) - -fun DependencyHandler.minecraft(dependencyNotation: Any) = add("minecraft", dependencyNotation) -fun DependencyHandler.mappings(dependencyNotation: Any) = add("mappings", dependencyNotation) -fun DependencyHandler.modImplementation(dependencyNotation: Any) = add("modImplementation", dependencyNotation) fun DependencyHandler.testmodImplementation(dependencyNotation: Any) = add("testmodImplementation", dependencyNotation) fun DependencyHandler.clientImplementation(dependencyNotation: Any) = add("clientImplementation", dependencyNotation) -val SourceSetContainer.main get() = named("main") val SourceSetContainer.client get() = named("client") val SourceSetContainer.testmod get() = named("testmod") -fun TaskContainer.remapJar(configure: RemapJarTask.() -> Unit) = named("remapJar").configure(configure) val TaskContainer.genClientOnlySources get() = named("genClientOnlySources") val TaskContainer.genCommonSources get() = named("genCommonSources") val TaskContainer.unpickClientOnlyJar get() = named("unpickClientOnlyJar") diff --git a/lom/src/main/kotlin/lom.gradle.kts b/lom/src/main/kotlin/lom.gradle.kts index 64ea008..401d241 100644 --- a/lom/src/main/kotlin/lom.gradle.kts +++ b/lom/src/main/kotlin/lom.gradle.kts @@ -11,30 +11,15 @@ import org.gradle.kotlin.dsl.* import java.io.File plugins { + id("jf.earlyafterevaluate") idea `java-library` `maven-publish` + id("fabric-loom") id("com.github.johnrengelman.shadow") } val devlibs = File(project.buildDir, "devlibs") -val args = extensions.create("lom") - -afterEvaluate { - // Needs to be registered before loom to properly set things up - dependencies { - minecraft("com.mojang:minecraft:${args.minecraftVersion.get()}") - if (args.yarnBuild != null) mappings("net.fabricmc:yarn:${args.minecraftVersion.get()}+${args.yarnBuild}:v2") - else loom.officialMojangMappings() - modImplementation("net.fabricmc:fabric-loader:${args.loaderVersion.get()}") - - testmodImplementation(sourceSets.main.get().output) - testmodImplementation(sourceSets.client.get().output) - } -} - -// Apply loom manually to ensure the afterEvaluate block above is done before looms are called -apply(plugin = "fabric-loom") // Configure loom for stricter dev env loom { @@ -113,6 +98,20 @@ repositories { mavenLocal() } +// Register common dependencies +val args = extensions.create("lom") +earlyAfterEvaluate { + dependencies { + minecraft("com.mojang:minecraft:${args.minecraftVersion.get()}") + if (args.yarnBuild != null) mappings("net.fabricmc:yarn:${args.minecraftVersion.get()}+${args.yarnBuild}:v2") + else loom.officialMojangMappings() + modImplementation("net.fabricmc:fabric-loader:${args.loaderVersion.get()}") + + testmodImplementation(sourceSets.main.get().output) + testmodImplementation(sourceSets.client.get().output) + } +} + // Mark normal jars as -dev tasks.jar.get().archiveClassifier.set("dev")