Shalom Ben-Zvi Kazaz
11/26/2024, 10:46 AMval otelApiJar: Configuration by configurations.creating {
isCanBeConsumed = false
isCanBeResolved = true
}
dependencies {
otelApiJar(libs.otelInstrumentationAnnotations)
}
in libs.versions.toml
[versions]
opentelemetryJavaagent = "2.10.0"
[libraries]
otelInstrumentationAnnotations = { group = "io.opentelemetry.instrumentation", name = "opentelemetry-instrumentation-annotations", version.ref = "opentelemetryJavaagent" }
I want to generate a text file with a list of the files in otelApiJar configuration that will be available as resource file at runtime.
I did this
tasks {
val listOtelFiles = register("listOtelFiles"){
doLast{
val file = File(sourceSets.main.get().output.resourcesDir,"otel-jars.txt")
val writer = PrintWriter(file)
otelApiJar.files.forEach {
writer.println(it.name)
}
writer.close()
}
}
processResources{
finalizedBy(listOtelFiles)
}
}
it works, i have a file containing these lines
opentelemetry-instrumentation-annotations-2.10.0.jar
opentelemetry-api-1.44.1.jar
opentelemetry-context-1.44.1.jar
is it the right way to do it?
can anyone suggest a better way?Thomas Broyer
11/26/2024, 10:59 AMShalom Ben-Zvi Kazaz
11/26/2024, 11:03 AMThomas Broyer
11/26/2024, 11:15 AMabstract class ListFiles : DefaultTask() {
@get:InputFiles @get:PathSensitive(PathSensitivity.NAME_ONLY) abstract val files: ConfigurableFileCollection
@get:OutputDirectory abstract DirectoryProperty outputDir
@get:Input abstract val filename: Property<String>
@TaskAction
fun listFiles() {
outputDir.file(filename).get().asFile.printWriter().use { out ->
files.forEach {
out.println(it.name)
}
}
}
}
val listOtelFiles by tasks.registering(ListFiles::class) {
files.from(otelApiJar)
outputFile = layout.buildDirectory.dir("otel-files")
filename = "otel-files.txt"
}
sourceSets {
main {
resources {
srcDir(listOtelFiles)
}
}
}
(untested)Shalom Ben-Zvi Kazaz
11/26/2024, 11:17 AMephemient
11/26/2024, 11:23 AMval listOtelFiles by tasks.registering {
inputs.files(otelApiJar)
val outputDirectory = layout.buildDirectory.dir("reports/listOtelFiles")
outputs.dir(outputDirectory)
doLast {
val outputDir = outputDirectory.get()
val outputFile = outputDir.file("otel-jars.txt")
outputDir.asFile.mkdirs()
outputFile.asFile.bufferedWriter().use { writer ->
for (file in inputs.files) writer.appendLine(file.name)
}
}
}
sourceSets.main {
resources.srcDir(listOtelFiles)
}
but a custom task class allows for other Gradle features to be used, such as annotating the input with @PathSensitive
Vampire
11/26/2024, 11:25 AMephemient
11/26/2024, 11:26 AM.withPathSensitivity(...)
but at some point extracting the logic out is probably a better ideaVampire
11/26/2024, 11:46 AMThomas Broyer
11/26/2024, 11:54 AM@get:PathSensitive(PathSensitivity.NAME_ONLY)