More cleanup and support for concrete as part of a project hierarchy.

This commit is contained in:
Alex Endfinger
2022-07-10 18:17:42 -04:00
parent ee4249e3e8
commit e3d191e277
8 changed files with 54 additions and 24 deletions

View File

@ -1,5 +1,3 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins { plugins {
`kotlin-dsl` `kotlin-dsl`
kotlin("plugin.serialization") version "1.6.21" kotlin("plugin.serialization") version "1.6.21"
@ -33,22 +31,22 @@ gradlePlugin {
implementationClass = "lgbt.mystic.foundation.concrete.ConcreteRootPlugin" implementationClass = "lgbt.mystic.foundation.concrete.ConcreteRootPlugin"
} }
create("concrete-project") { create("concrete-plugin") {
id = "lgbt.mystic.foundation.concrete-project" id = "lgbt.mystic.foundation.concrete-plugin"
implementationClass = "lgbt.mystic.foundation.concrete.ConcreteProjectPlugin" implementationClass = "lgbt.mystic.foundation.concrete.ConcreteProjectPlugin"
} }
} }
} }
java { java {
val version = JavaVersion.toVersion("1.8") val version = JavaVersion.toVersion("11")
sourceCompatibility = version sourceCompatibility = version
targetCompatibility = version targetCompatibility = version
} }
tasks.withType<KotlinCompile> { tasks.compileKotlin {
kotlinOptions { kotlinOptions {
jvmTarget = "1.8" jvmTarget = "11"
} }
} }

View File

@ -1,3 +1,3 @@
plugins { plugins {
id("lgbt.mystic.foundation.concrete-project") id("lgbt.mystic.foundation.concrete-plugin")
} }

View File

@ -1,11 +1,9 @@
package lgbt.mystic.foundation.concrete package lgbt.mystic.foundation.concrete
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.JavaVersion import org.gradle.api.JavaVersion
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.kotlin.dsl.get import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.repositories import org.gradle.kotlin.dsl.repositories
@ -36,7 +34,7 @@ class ConcreteProjectPlugin : Plugin<Project> {
} }
} }
val paperApiVersion = project.rootProject.extensions.getByType<ConcreteExtension>().paperApiVersion.get() val paperApiVersion = project.concreteRootExtension.paperApiVersion.get()
project.dependencies.add("compileOnly", "io.papermc.paper:paper-api:${paperApiVersion}") project.dependencies.add("compileOnly", "io.papermc.paper:paper-api:${paperApiVersion}")
@ -55,7 +53,7 @@ class ConcreteProjectPlugin : Plugin<Project> {
} }
} }
(project.tasks["shadowJar"] as ShadowJar).apply { project.shadowJarTask!!.apply {
archiveClassifier.set("plugin") archiveClassifier.set("plugin")
} }
@ -69,6 +67,6 @@ class ConcreteProjectPlugin : Plugin<Project> {
} }
} }
project.rootProject.tasks["setupPaperServer"].dependsOn(project.tasks["shadowJar"]) project.concreteRootProject.tasks["setupPaperServer"].dependsOn(project.tasks["shadowJar"])
} }
} }

View File

@ -7,7 +7,7 @@ import org.gradle.kotlin.dsl.create
class ConcreteRootPlugin : Plugin<Project> { class ConcreteRootPlugin : Plugin<Project> {
override fun apply(project: Project) { override fun apply(project: Project) {
project.apply(plugin = "java") project.apply(plugin = "base")
project.extensions.create<ConcreteExtension>("concrete") project.extensions.create<ConcreteExtension>("concrete")
val setupPaperServer = project.tasks.create<SetupPaperServer>("setupPaperServer") val setupPaperServer = project.tasks.create<SetupPaperServer>("setupPaperServer")
val runPaperServer = project.tasks.create<RunPaperServer>("runPaperServer") val runPaperServer = project.tasks.create<RunPaperServer>("runPaperServer")

View File

@ -7,7 +7,7 @@ import java.net.http.HttpRequest
import java.net.http.HttpResponse import java.net.http.HttpResponse
class PaperVersionClient( class PaperVersionClient(
val client: HttpClient = HttpClient.newHttpClient(), private val client: HttpClient = HttpClient.newHttpClient(),
private val gson: Gson = Globals.gson private val gson: Gson = Globals.gson
) { ) {
private val apiBaseUrl = URI.create("https://papermc.io/api/v2/") private val apiBaseUrl = URI.create("https://papermc.io/api/v2/")

View File

@ -1,6 +1,5 @@
package lgbt.mystic.foundation.concrete package lgbt.mystic.foundation.concrete
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
@ -45,7 +44,7 @@ open class SetupPaperServer : DefaultTask() {
continue continue
} }
val task = project.tasks.getByName("shadowJar") as ShadowJar val task = project.shadowJarTask!!
val pluginJarFile = task.outputs.files.first() val pluginJarFile = task.outputs.files.first()
val pluginLinkFile = paperPluginsDirectory.resolve("${project.name}.jar") val pluginLinkFile = paperPluginsDirectory.resolve("${project.name}.jar")
pluginLinkFile.delete() pluginLinkFile.delete()

View File

@ -12,7 +12,7 @@ open class UpdateManifestTask : DefaultTask() {
val updateFile = manifestsDir.resolve("update.json") val updateFile = manifestsDir.resolve("update.json")
val rootPath = project.rootProject.rootDir.toPath() val rootPath = project.rootProject.rootDir.toPath()
val updateManifest = project.findPluginProjects().mapNotNull { project -> val updateManifest = project.findPluginProjects().mapNotNull { project ->
val paths = project.shadowJarOutputs.allFilesRelativeToPath(rootPath) val paths = project.shadowJarOutputs!!.allFilesRelativeToPath(rootPath)
if (paths.isNotEmpty()) { if (paths.isNotEmpty()) {
project.name to mapOf( project.name to mapOf(
"version" to project.version, "version" to project.version,

View File

@ -1,16 +1,51 @@
package lgbt.mystic.foundation.concrete package lgbt.mystic.foundation.concrete
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.tasks.TaskOutputs import org.gradle.api.tasks.TaskOutputs
import java.nio.file.FileSystems import java.nio.file.FileSystems
import java.nio.file.Path import java.nio.file.Path
fun Project.isPluginProject() = project.tasks.names.contains("shadowJar") internal fun Project.isPluginProject() = plugins.hasPlugin(ConcreteProjectPlugin::class.java)
fun Project.findPluginProjects() = rootProject.allprojects.filter { project -> project.isPluginProject() } internal fun Project.findPluginProjects() = allprojects.filter { project -> project.isPluginProject() }
val Project.shadowJarOutputs: TaskOutputs internal val Project.shadowJarTask: ShadowJar?
get() = project.tasks.getByName("shadowJar").outputs get() =
if (project.tasks.names.contains("shadowJar"))
project.tasks.getByName("shadowJar") as ShadowJar
else null
fun TaskOutputs.allFilesRelativeToPath(root: Path): List<Path> = files.map { root.relativize(it.toPath()) } internal val Project.shadowJarOutputs: TaskOutputs?
get() = shadowJarTask?.outputs
fun Path.toUnixString() = toString().replace(FileSystems.getDefault().separator, "/") internal val Project.concreteRootExtension: ConcreteExtension
get() {
val direct = extensions.findByType(ConcreteExtension::class.java)
if (direct != null) {
return direct
}
if (parent != null) {
return parent!!.concreteRootExtension
}
throw RuntimeException("Failed to find concrete extension. Did you apply the concrete root plugin?")
}
internal val Project.concreteRootProject: Project
get() {
val direct = extensions.findByType(ConcreteExtension::class.java)
if (direct != null) {
return this
}
if (parent != null) {
return parent!!
}
throw RuntimeException("Failed to find concrete root. Did you apply the concrete root plugin?")
}
internal fun TaskOutputs.allFilesRelativeToPath(root: Path): List<Path> = files.map { root.relativize(it.toPath()) }
internal fun Path.toUnixString() = toString().replace(FileSystems.getDefault().separator, "/")