Skip to content

Commit 1cba51e

Browse files
committed
Migrate examples/distro and examples/extension from Groovy to Kotlin DSL
1 parent 20ed8eb commit 1cba51e

26 files changed

Lines changed: 479 additions & 531 deletions

.github/renovate.json5

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@
366366
{
367367
// pinned version to Jetty 8 (Servlet 3.0) for compatibility
368368
matchFileNames: [
369-
'examples/distro/instrumentation/servlet-3/build.gradle',
369+
'examples/distro/instrumentation/servlet-3/build.gradle.kts',
370370
],
371371
matchUpdateTypes: [
372372
'major',

.github/scripts/update-sdk-version.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ version=$1
44

55
sed -Ei "s/val otelSdkVersion = \"[^\"]*\"/val otelSdkVersion = \"$version\"/" dependencyManagement/build.gradle.kts
66

7-
sed -Ei "s/(opentelemetrySdk *: )\"[^\"]*\"/\1\"$version\"/" examples/distro/build.gradle
7+
sed -Ei "s/(const val opentelemetrySdkVersion = )\"[^\"]*\"/\1\"$version\"/" examples/distro/buildSrc/src/main/kotlin/Versions.kt
88

99
sed -Ei "s/(\"opentelemetrySdk\" to )\"[^\"]*\"/\1\"$version\"/" examples/extension/build.gradle.kts

.github/scripts/update-version.sh

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,14 @@ fi
1111
sed -Ei "s/val stableVersion = \"[^\"]*\"/val stableVersion = \"$version\"/" version.gradle.kts
1212
sed -Ei "s/val alphaVersion = \"[^\"]*\"/val alphaVersion = \"$alpha_version\"/" version.gradle.kts
1313

14-
sed -Ei "s/(opentelemetryJavaagent *: )\"[^\"]*\"/\1\"$version\"/" examples/distro/build.gradle
15-
sed -Ei "s/(opentelemetryJavaagentAlpha *: )\"[^\"]*\"/\1\"$alpha_version\"/" examples/distro/build.gradle
14+
sed -Ei "s/(const val opentelemetryJavaagentVersion = )\"[^\"]*\"/\1\"$version\"/" examples/distro/buildSrc/src/main/kotlin/Versions.kt
15+
sed -Ei "s/(const val opentelemetryJavaagentAlphaVersion = )\"[^\"]*\"/\1\"$alpha_version\"/" examples/distro/buildSrc/src/main/kotlin/Versions.kt
1616

17-
sed -Ei "s/(classpath \"io.opentelemetry.instrumentation:gradle-plugins:)[^\"]*\"/\1$alpha_version\"/" examples/distro/build.gradle
17+
sed -Ei "s/(io.opentelemetry.instrumentation.muzzle-(generation|check)\"\) version )\"[^\"]*\"/\1\"$alpha_version\"/" examples/distro/settings.gradle.kts
1818

1919
sed -Ei "s/(\"opentelemetryJavaagent\" to )\"[^\"]*\"/\1\"$version\"/" examples/extension/build.gradle.kts
2020
sed -Ei "s/(\"opentelemetryJavaagentAlpha\" to )\"[^\"]*\"/\1\"$alpha_version\"/" examples/extension/build.gradle.kts
2121

22-
sed -Ei "s/(io.opentelemetry.instrumentation.muzzle-generation\"\) version )\"[^\"]*\"/\1\"$alpha_version\"/" examples/extension/build.gradle.kts
23-
sed -Ei "s/(io.opentelemetry.instrumentation.muzzle-check\"\) version )\"[^\"]*\"/\1\"$alpha_version\"/" examples/extension/build.gradle.kts
22+
sed -Ei "s/(io.opentelemetry.instrumentation.muzzle-(generation|check)\"\) version )\"[^\"]*\"/\1\"$alpha_version\"/" examples/extension/build.gradle.kts
2423

2524
sed -Ei "1 s/(Comparing source compatibility of [a-z-]+)-[0-9]+\.[0-9]+\.[0-9]+(-SNAPSHOT)?.jar/\1-$version.jar/" docs/apidiffs/current_vs_latest/*.txt

examples/distro/agent/build.gradle

Lines changed: 0 additions & 134 deletions
This file was deleted.
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
2+
3+
plugins {
4+
id("otel.java-conventions")
5+
id("com.gradleup.shadow")
6+
}
7+
8+
// this configuration collects libs that will be placed in the bootstrap classloader
9+
val bootstrapLibs by configurations.creating {
10+
isCanBeResolved = true
11+
isCanBeConsumed = false
12+
}
13+
// this configuration collects libs that will be placed in the agent classloader, isolated from the instrumented application code
14+
val javaagentLibs by configurations.creating {
15+
isCanBeResolved = true
16+
isCanBeConsumed = false
17+
}
18+
// this configuration stores the upstream agent dep that's extended by this project
19+
val upstreamAgent by configurations.creating {
20+
isCanBeResolved = true
21+
isCanBeConsumed = false
22+
}
23+
24+
dependencies {
25+
bootstrapLibs(project(":bootstrap"))
26+
27+
javaagentLibs(project(":custom"))
28+
javaagentLibs(project(":instrumentation:servlet-3"))
29+
30+
upstreamAgent("io.opentelemetry.javaagent:opentelemetry-javaagent:$opentelemetryJavaagentVersion")
31+
}
32+
33+
fun isolateClasses(jars: Iterable<File>): CopySpec = copySpec {
34+
jars.forEach {
35+
from(zipTree(it)) {
36+
into("inst")
37+
rename("^(.*)\\.class\$", "\$1.classdata")
38+
exclude("^LICENSE\$")
39+
exclude("META-INF/INDEX.LIST")
40+
exclude("META-INF/*.DSA")
41+
exclude("META-INF/*.SF")
42+
exclude("META-INF/maven/**")
43+
exclude("META-INF/MANIFEST.MF")
44+
}
45+
}
46+
}
47+
48+
tasks {
49+
jar {
50+
enabled = false
51+
}
52+
53+
// building the final javaagent jar is done in 3 steps:
54+
55+
// 1. all distro specific javaagent libs are relocated
56+
val relocateJavaagentLibs by registering(ShadowJar::class) {
57+
configurations = listOf(javaagentLibs)
58+
59+
archiveFileName.set("javaagentLibs-relocated.jar")
60+
61+
duplicatesStrategy = DuplicatesStrategy.FAIL
62+
mergeServiceFiles()
63+
// mergeServiceFiles requires that duplicate strategy is set to include
64+
filesMatching("META-INF/services/**") {
65+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
66+
}
67+
exclude("**/module-info.class")
68+
relocatePackages(this)
69+
70+
// exclude known bootstrap dependencies - they can't appear in the inst/ directory
71+
dependencies {
72+
exclude(dependency("io.opentelemetry:opentelemetry-api"))
73+
exclude(dependency("io.opentelemetry:opentelemetry-common"))
74+
exclude(dependency("io.opentelemetry:opentelemetry-context"))
75+
exclude(dependency("io.opentelemetry.semconv:opentelemetry-semconv"))
76+
exclude(dependency("io.opentelemetry.semconv:opentelemetry-semconv-incubating"))
77+
// events API and metrics advice API
78+
exclude(dependency("io.opentelemetry:opentelemetry-api-incubator"))
79+
}
80+
}
81+
82+
// 2. the distro javaagent libs are then isolated - moved to the inst/ directory
83+
// having a separate task for isolating javaagent libs is required to avoid duplicates with the upstream javaagent
84+
// duplicatesStrategy in shadowJar won't be applied when adding files with with(CopySpec) because each CopySpec has
85+
// its own duplicatesStrategy
86+
val isolateJavaagentLibs by registering(Copy::class) {
87+
dependsOn(relocateJavaagentLibs)
88+
with(isolateClasses(relocateJavaagentLibs.get().outputs.files))
89+
90+
into(layout.buildDirectory.dir("isolated/javaagentLibs"))
91+
}
92+
93+
// 3. the relocated and isolated javaagent libs are merged together with the bootstrap libs (which undergo relocation
94+
// in this task) and the upstream javaagent jar; duplicates are removed
95+
shadowJar {
96+
configurations = listOf(bootstrapLibs, upstreamAgent)
97+
98+
from(isolateJavaagentLibs)
99+
100+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
101+
mergeServiceFiles("inst/META-INF/services")
102+
// mergeServiceFiles requires that duplicate strategy is set to include
103+
filesMatching("inst/META-INF/services/**") {
104+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
105+
}
106+
107+
exclude("**/module-info.class")
108+
relocatePackages(this)
109+
110+
manifest {
111+
attributes["Main-Class"] = "io.opentelemetry.javaagent.OpenTelemetryAgent"
112+
attributes["Agent-Class"] = "io.opentelemetry.javaagent.OpenTelemetryAgent"
113+
attributes["Premain-Class"] = "io.opentelemetry.javaagent.OpenTelemetryAgent"
114+
attributes["Can-Redefine-Classes"] = "true"
115+
attributes["Can-Retransform-Classes"] = "true"
116+
attributes["Implementation-Vendor"] = "Demo"
117+
attributes["Implementation-Version"] = "demo-${project.version}-otel-$opentelemetryJavaagentVersion"
118+
}
119+
}
120+
121+
assemble {
122+
dependsOn(shadowJar)
123+
}
124+
}

examples/distro/bootstrap/build.gradle

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
plugins {
2+
id("otel.java-conventions")
3+
}

examples/distro/build.gradle

Lines changed: 0 additions & 87 deletions
This file was deleted.

examples/distro/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
group = "io.opentelemetry.example"
2+
version = "1.0-SNAPSHOT"

0 commit comments

Comments
 (0)