Better solution for loom dependencies

This commit is contained in:
Johannes Frohnmeyer 2022-10-07 19:05:03 +02:00
parent 1725b91c94
commit 4ddd8fe9de
Signed by: Johannes
GPG Key ID: E76429612C2929F4
5 changed files with 41 additions and 34 deletions

View File

@ -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<Project>) {
(extra["earlyAfterEvaluates"] as MutableList<Action<Project>>).add(action)
}

View File

@ -14,12 +14,12 @@ var Project.versionS: String
} }
var Project.versionType: VersionType var Project.versionType: VersionType
get() = if (extra.has("io.gitlab.jfronny.scripts.getVersionType")) extra["io.gitlab.jfronny.scripts.getVersionType"] as VersionType else VersionType.RELEASE get() = if (extra.has("versionType")) extra["versionType"] as VersionType else VersionType.RELEASE
set(value) = extra.set("io.gitlab.jfronny.scripts.getVersionType", value) set(value) = extra.set("versionType", value)
var Project.changelog: String var Project.changelog: String
get() = if (extra.has("io.gitlab.jfronny.scripts.getChangelog")) extra["io.gitlab.jfronny.scripts.getChangelog"].toString() else "" get() = if (extra.has("changelog")) extra["changelog"].toString() else ""
set(value) = extra.set("io.gitlab.jfronny.scripts.getChangelog", value) set(value) = extra.set("changelog", value)
val TaskContainer.deployDebug: Task get() = findByName("deployDebug") ?: register("deployDebug").get().dependsOn(named<DefaultTask>("build").get()) val TaskContainer.deployDebug: Task get() = findByName("deployDebug") ?: register("deployDebug").get().dependsOn(named<DefaultTask>("build").get())
val TaskContainer.deployRelease: Task get() = findByName("deployRelease") ?: register("deployRelease").get().dependsOn(deployDebug) val TaskContainer.deployRelease: Task get() = findByName("deployRelease") ?: register("deployRelease").get().dependsOn(deployDebug)

View File

@ -0,0 +1,12 @@
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.kotlin.dsl.extra
extra["earlyAfterEvaluates"] = ArrayList<Action<Project>>()
afterEvaluate {
(extra["earlyAfterEvaluates"] as List<Action<Project>>).forEach {
it.execute(this)
}
extra["earlyAfterEvaluates"] = null
}

View File

@ -1,32 +1,19 @@
package io.gitlab.jfronny.scripts 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 net.fabricmc.loom.task.UnpickJarTask
import org.gradle.api.Action
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.api.artifacts.dsl.DependencyHandler
import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceSetContainer import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.TaskContainer import org.gradle.api.tasks.TaskContainer
import org.gradle.kotlin.dsl.named import org.gradle.kotlin.dsl.named
val Project.loom: LoomGradleExtensionAPI get() = LoomGradleExtension.get(this)
fun Project.loom(configure: Action<LoomGradleExtensionAPI>) = 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.testmodImplementation(dependencyNotation: Any) = add("testmodImplementation", dependencyNotation)
fun DependencyHandler.clientImplementation(dependencyNotation: Any) = add("clientImplementation", dependencyNotation) fun DependencyHandler.clientImplementation(dependencyNotation: Any) = add("clientImplementation", dependencyNotation)
val SourceSetContainer.main get() = named<SourceSet>("main")
val SourceSetContainer.client get() = named<SourceSet>("client") val SourceSetContainer.client get() = named<SourceSet>("client")
val SourceSetContainer.testmod get() = named<SourceSet>("testmod") val SourceSetContainer.testmod get() = named<SourceSet>("testmod")
fun TaskContainer.remapJar(configure: RemapJarTask.() -> Unit) = named<RemapJarTask>("remapJar").configure(configure)
val TaskContainer.genClientOnlySources get() = named<DefaultTask>("genClientOnlySources") val TaskContainer.genClientOnlySources get() = named<DefaultTask>("genClientOnlySources")
val TaskContainer.genCommonSources get() = named<DefaultTask>("genCommonSources") val TaskContainer.genCommonSources get() = named<DefaultTask>("genCommonSources")
val TaskContainer.unpickClientOnlyJar get() = named<UnpickJarTask>("unpickClientOnlyJar") val TaskContainer.unpickClientOnlyJar get() = named<UnpickJarTask>("unpickClientOnlyJar")

View File

@ -11,30 +11,15 @@ import org.gradle.kotlin.dsl.*
import java.io.File import java.io.File
plugins { plugins {
id("jf.earlyafterevaluate")
idea idea
`java-library` `java-library`
`maven-publish` `maven-publish`
id("fabric-loom")
id("com.github.johnrengelman.shadow") id("com.github.johnrengelman.shadow")
} }
val devlibs = File(project.buildDir, "devlibs") val devlibs = File(project.buildDir, "devlibs")
val args = extensions.create<LomExtension>("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 // Configure loom for stricter dev env
loom { loom {
@ -113,6 +98,20 @@ repositories {
mavenLocal() mavenLocal()
} }
// Register common dependencies
val args = extensions.create<LomExtension>("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 // Mark normal jars as -dev
tasks.jar.get().archiveClassifier.set("dev") tasks.jar.get().archiveClassifier.set("dev")