11package io.opentelemetry.gradle
22
3+ import org.gradle.api.DefaultTask
34import org.gradle.api.Plugin
45import org.gradle.api.Project
6+ import org.gradle.api.file.DirectoryProperty
57import org.gradle.api.plugins.JavaPlugin
68import org.gradle.api.plugins.JavaPluginExtension
9+ import org.gradle.api.provider.Property
10+ import org.gradle.api.tasks.Input
11+ import org.gradle.api.tasks.OutputDirectory
12+ import org.gradle.api.tasks.TaskAction
713import org.gradle.kotlin.dsl.the
814import java.io.File
915
@@ -18,31 +24,48 @@ class OtelVersionClassPlugin : Plugin<Project> {
1824 override fun apply (project : Project ) {
1925 project.plugins.apply (JavaPlugin ::class .java)
2026
21- project.tasks.register(" generateOtelVersionClass" ) {
22- doLast {
23- writeFile(project)
24- }
27+ val outDir = project.layout.buildDirectory.dir(" generated/sources/version/java/main" )
28+
29+ project.tasks.register(" generateOtelVersionClass" , GenerateOtelVersionClassTask ::class .java) {
30+ projectGroup.set(" ${project.group} " )
31+ projectName.set(project.name)
32+ projectVersion.set(" ${project.version} " )
33+ outputDirectory.set(outDir)
2534 }
2635 // Add dependency on this task
27- project.tasks.getByName( " compileJava" ) {
36+ project.tasks.matching { it.name == " compileJava" || it.name == " sourcesJar " }.configureEach {
2837 dependsOn(" generateOtelVersionClass" )
2938 }
3039 // Add new source dir to the "main" source set
31- val outDir = buildOutDir(project)
3240 val java = project.the<JavaPluginExtension >()
3341 java.sourceSets.getByName(" main" ).java {
3442 srcDir(outDir)
3543 }
3644 }
45+ }
46+
47+ abstract class GenerateOtelVersionClassTask : DefaultTask () {
48+ @get:Input
49+ abstract val projectGroup: Property <String >
50+
51+ @get:Input
52+ abstract val projectName: Property <String >
3753
38- private fun writeFile (project : Project ) {
39- val group = " ${project.group} " .replace(' .' , ' /' )
40- val projectName = project.name.replace(' -' , ' /' )
41- val outDir = buildOutDir(project)
42- val filename = " $group /$projectName /internal/OtelVersion.java"
54+ @get:Input
55+ abstract val projectVersion: Property <String >
56+
57+ @get:OutputDirectory
58+ abstract val outputDirectory: DirectoryProperty
59+
60+ @TaskAction
61+ fun generate () {
62+ val group = projectGroup.get().replace(' .' , ' /' )
63+ val name = projectName.get().replace(' -' , ' /' )
64+ val outDir = outputDirectory.get().asFile
65+ val filename = " $group /$name /internal/OtelVersion.java"
4366 val outFile = File (outDir, filename)
44- val packageName = " ${project.group } .${project.name .replace(' -' , ' .' )} .internal"
45- val classBody = getClassBody(" ${project.version} " , packageName)
67+ val packageName = " ${projectGroup.get() } .${projectName.get() .replace(' -' , ' .' )} .internal"
68+ val classBody = getClassBody(projectVersion.get() , packageName)
4669
4770 outFile.parentFile.mkdirs()
4871 outFile.writeText(classBody)
@@ -63,8 +86,4 @@ class OtelVersionClassPlugin : Plugin<Project> {
6386 }
6487 """ .trimIndent()
6588 }
66-
67- private fun buildOutDir (project : Project ): File {
68- return File (project.layout.buildDirectory.asFile.get(), " generated/sources/version/java/main" )
69- }
7089}
0 commit comments