Skip to content

Commit f1da1f0

Browse files
authored
Rework service file merging (#14617)
1 parent 7519b26 commit f1da1f0

File tree

10 files changed

+84
-27
lines changed

10 files changed

+84
-27
lines changed

conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-shadowing.gradle.kts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,18 @@ plugins {
77
// NOTE: any modifications below should also be made in
88
// io.opentelemetry.instrumentation.muzzle-check.gradle.kts
99
tasks.withType<ShadowJar>().configureEach {
10-
// mergeServiceFiles requires that duplicate strategy is set to include
11-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
1210
mergeServiceFiles()
11+
// mergeServiceFiles requires that duplicate strategy is set to include
12+
filesMatching("META-INF/services/**") {
13+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
14+
}
1315
// Merge any AWS SDK service files that may be present (too bad they didn't just use normal
1416
// service loader...)
1517
mergeServiceFiles("software/amazon/awssdk/global/handlers")
18+
// mergeServiceFiles requires that duplicate strategy is set to include
19+
filesMatching("software/amazon/awssdk/global/handlers/**") {
20+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
21+
}
1622

1723
exclude("**/module-info.class")
1824

examples/distro/agent/build.gradle

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ CopySpec isolateClasses(Iterable<File> jars) {
4141
from(zipTree(it)) {
4242
into("inst")
4343
rename("^(.*)\\.class\$", "\$1.classdata")
44-
// Rename LICENSE file since it clashes with license dir on non-case sensitive FSs (i.e. Mac)
45-
rename("^LICENSE\$", "LICENSE.renamed")
44+
exclude("^LICENSE\$")
4645
exclude("META-INF/INDEX.LIST")
4746
exclude("META-INF/*.DSA")
4847
exclude("META-INF/*.SF")
@@ -66,9 +65,12 @@ tasks {
6665

6766
archiveFileName.set("javaagentLibs-relocated.jar")
6867

69-
// mergeServiceFiles requires that duplicate strategy is set to include
70-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
68+
duplicatesStrategy = DuplicatesStrategy.FAIL
7169
mergeServiceFiles()
70+
// mergeServiceFiles requires that duplicate strategy is set to include
71+
filesMatching("META-INF/services/**") {
72+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
73+
}
7274
exclude("**/module-info.class")
7375
relocatePackages(it)
7476

@@ -105,9 +107,12 @@ tasks {
105107

106108
archiveClassifier.set("all")
107109

108-
// mergeServiceFiles requires that duplicate strategy is set to include
109-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
110+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
110111
mergeServiceFiles("inst/META-INF/services")
112+
// mergeServiceFiles requires that duplicate strategy is set to include
113+
filesMatching("inst/META-INF/services/**") {
114+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
115+
}
111116

112117
exclude("**/module-info.class")
113118
relocatePackages(it)

examples/distro/gradle/instrumentation.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@ dependencies {
3636
shadowJar {
3737
configurations = [project.configurations.runtimeClasspath, project.configurations.testInstrumentation]
3838

39-
// mergeServiceFiles requires that duplicate strategy is set to include
40-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
4139
mergeServiceFiles()
40+
// mergeServiceFiles requires that duplicate strategy is set to include
41+
filesMatching("inst/META-INF/services/**") {
42+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
43+
}
4244

4345
archiveFileName = 'agent-testing.jar'
4446

examples/distro/testing/agent-for-testing/build.gradle

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,13 @@ tasks {
6161

6262
archiveFileName.set("javaagentLibs-relocated.jar")
6363

64-
// mergeServiceFiles requires that duplicate strategy is set to include
65-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
64+
duplicatesStrategy = DuplicatesStrategy.FAIL
6665
mergeServiceFiles()
66+
// mergeServiceFiles requires that duplicate strategy is set to include
67+
filesMatching("META-INF/services/**") {
68+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
69+
}
70+
6771
exclude("**/module-info.class")
6872
relocatePackages(it)
6973

@@ -100,9 +104,12 @@ tasks {
100104

101105
archiveClassifier.set("")
102106

103-
// mergeServiceFiles requires that duplicate strategy is set to include
104-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
107+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
105108
mergeServiceFiles("inst/META-INF/services")
109+
// mergeServiceFiles requires that duplicate strategy is set to include
110+
filesMatching("inst/META-INF/services/**") {
111+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
112+
}
106113

107114
exclude("**/module-info.class")
108115
relocatePackages(it)

gradle-plugins/src/main/kotlin/io.opentelemetry.instrumentation.muzzle-check.gradle.kts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,18 @@ val shadowMuzzleBootstrap by tasks.registering(ShadowJar::class) {
7474
// this is a copied from io.opentelemetry.instrumentation.javaagent-shadowing for now at least to
7575
// avoid publishing io.opentelemetry.instrumentation.javaagent-shadowing publicly
7676
tasks.withType<ShadowJar>().configureEach {
77-
// mergeServiceFiles requires that duplicate strategy is set to include
78-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
7977
mergeServiceFiles()
78+
// mergeServiceFiles requires that duplicate strategy is set to include
79+
filesMatching("META-INF/services/**") {
80+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
81+
}
8082
// Merge any AWS SDK service files that may be present (too bad they didn't just use normal
8183
// service loader...)
8284
mergeServiceFiles("software/amazon/awssdk/global/handlers")
85+
// mergeServiceFiles requires that duplicate strategy is set to include
86+
filesMatching("software/amazon/awssdk/global/handlers/**") {
87+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
88+
}
8389

8490
exclude("**/module-info.class")
8591

instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
2+
13
plugins {
24
id("otel.javaagent-instrumentation")
35
}
@@ -226,11 +228,13 @@ tasks {
226228
systemProperty("collectMetadata", collectMetadata)
227229
}
228230

229-
withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar>().configureEach {
230-
// mergeServiceFiles requires that duplicate strategy is set to include
231-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
231+
withType<ShadowJar>().configureEach {
232232
mergeServiceFiles {
233233
include("software/amazon/awssdk/global/handlers/execution.interceptors")
234234
}
235+
// mergeServiceFiles requires that duplicate strategy is set to include
236+
filesMatching("software/amazon/awssdk/global/handlers/execution.interceptors") {
237+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
238+
}
235239
}
236240
}

javaagent-internal-logging-simple/build.gradle.kts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ dependencies {
2222

2323
tasks {
2424
val shadowJar by existing(ShadowJar::class) {
25-
// mergeServiceFiles requires that duplicate strategy is set to include
26-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
2725
// required for META-INF/services files relocation
2826
mergeServiceFiles()
27+
// mergeServiceFiles requires that duplicate strategy is set to include
28+
filesMatching("META-INF/services/**") {
29+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
30+
}
2931

3032
// Prevents configuration naming conflict with other SLF4J instances
3133
relocate("org.slf4j", "io.opentelemetry.javaagent.slf4j")

javaagent/build.gradle.kts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,15 @@ tasks {
160160

161161
excludeBootstrapClasses()
162162

163+
duplicatesStrategy = DuplicatesStrategy.FAIL
164+
// TODO: remove after updating contrib to 1.50.0
165+
filesMatching("io/opentelemetry/contrib/gcp/resource/version.properties") {
166+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
167+
}
168+
exclude("META-INF/LICENSE")
169+
exclude("META-INF/NOTICE")
170+
exclude("META-INF/maven/**")
171+
163172
archiveFileName.set("baseJavaagentLibs-relocated-tmp.jar")
164173
}
165174

@@ -180,6 +189,18 @@ tasks {
180189
// remove MPL licensed content
181190
exclude("okhttp3/internal/publicsuffix/PublicSuffixDatabase.list")
182191

192+
duplicatesStrategy = DuplicatesStrategy.FAIL
193+
// TODO: remove after updating contrib to 1.50.0
194+
filesMatching("io/opentelemetry/contrib/gcp/resource/version.properties") {
195+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
196+
}
197+
filesMatching("META-INF/io/opentelemetry/instrumentation/**") {
198+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
199+
}
200+
exclude("META-INF/LICENSE")
201+
exclude("META-INF/NOTICE")
202+
exclude("META-INF/maven/**")
203+
183204
archiveFileName.set("javaagentLibs-relocated-tmp.jar")
184205
}
185206

@@ -391,8 +412,8 @@ fun CopySpec.isolateClasses(jar: Provider<RegularFile>) {
391412
// important to keep prefix "inst" short, as it is prefixed to lots of strings in runtime mem
392413
into("inst")
393414
rename("(^.*)\\.class\$", "\$1.classdata")
394-
// Rename LICENSE file since it clashes with license dir on non-case sensitive FSs (i.e. Mac)
395-
rename("""^LICENSE$""", "LICENSE.renamed")
415+
exclude("""^LICENSE$""")
416+
exclude("META-INF/LICENSE.txt")
396417
exclude("META-INF/INDEX.LIST")
397418
exclude("META-INF/*.DSA")
398419
exclude("META-INF/*.SF")

testing/armeria-shaded-for-testing/build.gradle.kts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,11 @@ tasks {
3737
relocate("org.HdrHistogram", "io.opentelemetry.testing.internal.org.hdrhistogram")
3838
relocate("org.LatencyUtils", "io.opentelemetry.testing.internal.org.latencyutils")
3939

40-
// mergeServiceFiles requires that duplicate strategy is set to include
41-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
4240
mergeServiceFiles()
41+
// mergeServiceFiles requires that duplicate strategy is set to include
42+
filesMatching("META-INF/services/**") {
43+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
44+
}
4345
}
4446

4547
val extractShadowJar by registering(Copy::class) {

testing/wiremock-shaded-for-testing/build.gradle.kts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@ tasks {
3535
relocate("javax.servlet", "io.opentelemetry.testing.internal.servlet")
3636
relocate("org.yaml", "io.opentelemetry.testing.internal.yaml")
3737

38-
// mergeServiceFiles requires that duplicate strategy is set to include
39-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
4038
mergeServiceFiles()
39+
// mergeServiceFiles requires that duplicate strategy is set to include
40+
filesMatching("META-INF/services/**") {
41+
duplicatesStrategy = DuplicatesStrategy.INCLUDE
42+
}
4143
}
4244

4345
val extractShadowJar by registering(Copy::class) {

0 commit comments

Comments
 (0)