1+ import org.gradle.api.DefaultTask
2+ import org.gradle.api.Project
3+ import org.gradle.api.file.DirectoryProperty
4+ import org.gradle.api.provider.Property
5+ import org.gradle.api.tasks.Input
6+ import org.gradle.api.tasks.OutputDirectory
7+ import org.gradle.api.tasks.SourceSetContainer
8+ import org.gradle.api.tasks.TaskAction
9+ import org.gradle.kotlin.dsl.register
10+ import java.io.File
11+
12+ internal abstract class GenerateVersionFileTask : DefaultTask () {
13+
14+ init {
15+ group = " inventoryFramework"
16+ }
17+
18+ @get:Input
19+ abstract val version: Property <String >
20+
21+ @get:OutputDirectory
22+ abstract val outputDir: DirectoryProperty
23+
24+ @TaskAction
25+ fun generate () {
26+ val packageDir = outputDir.get().dir(" me/devnatan/inventoryframework/runtime" ).asFile
27+ packageDir.mkdirs()
28+
29+ val file = File (packageDir, " InventoryFramework.java" )
30+ file.writeText(
31+ """
32+ package me.devnatan.inventoryframework.runtime;
33+
34+ import org.bukkit.plugin.java.JavaPlugin;
35+
36+ public final class InventoryFramework extends JavaPlugin {
37+
38+ public static final String LIBRARY_VERSION = "${version.get()} ";
39+ }
40+
41+ """ .trimIndent()
42+ )
43+ }
44+ }
45+
46+ internal fun Project.registerGenerateVersionFileTask () {
47+ val generateVersionFileTask = tasks.register<GenerateVersionFileTask >(" generateVersionFile" ) {
48+ version.set(project.version.toString())
49+ outputDir.set(layout.buildDirectory.dir(" generated/sources/ifversion" ))
50+ }
51+
52+ extensions.configure<SourceSetContainer >(" sourceSets" ) {
53+ named(" main" ) {
54+ java.srcDir(generateVersionFileTask.flatMap { it.outputDir })
55+ }
56+ }
57+
58+ tasks.named(" compileJava" ) {
59+ dependsOn(generateVersionFileTask)
60+ }
61+ }
0 commit comments