Skip to content

Commit c9edaa4

Browse files
committed
Making shadowed jar the default for baseJavaagentLibs
1 parent c434682 commit c9edaa4

File tree

4 files changed

+25
-33
lines changed

4 files changed

+25
-33
lines changed

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

Lines changed: 6 additions & 4 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
`java-library`
35

@@ -48,7 +50,8 @@ val testInstrumentation by configurations.creating {
4850
isCanBeResolved = true
4951
}
5052

51-
tasks.shadowJar {
53+
val agentTestingShadowJar by tasks.registering(ShadowJar::class) {
54+
from(sourceSets.main.map { it.output })
5255
configurations = listOf(project.configurations.runtimeClasspath.get(), testInstrumentation)
5356

5457
archiveFileName.set("agent-testing.jar")
@@ -101,18 +104,17 @@ class JavaagentTestArgumentsProvider(
101104
// need to run this after evaluate because testSets plugin adds new test tasks
102105
afterEvaluate {
103106
tasks.withType<Test>().configureEach {
104-
val shadowJar = tasks.shadowJar.get()
105107
val agentShadowJar = agentForTesting.resolve().first()
106108

107-
dependsOn(shadowJar)
109+
dependsOn(agentTestingShadowJar)
108110
// TODO: Figure out why dependsOn override is still needed in otel.javaagent-testing despite
109111
// this dependency.
110112
dependsOn(agentForTesting.buildDependencies)
111113

112114
jvmArgumentProviders.add(
113115
JavaagentTestArgumentsProvider(
114116
agentShadowJar,
115-
shadowJar.archiveFile.get().asFile
117+
agentTestingShadowJar.get().archiveFile.get().asFile
116118
)
117119
)
118120

instrumentation/internal/internal-class-loader/javaagent/build.gradle.kts

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,8 @@ dependencies {
2525
testImplementation("org.apache.felix:org.apache.felix.framework:6.0.2")
2626
}
2727

28-
val shadedJar by tasks.registering(ShadowJar::class) {
29-
from(zipTree(tasks.jar.get().archiveFile))
30-
archiveClassifier.set("shaded")
31-
}
32-
3328
tasks {
3429
withType(ShadowJar::class) {
3530
relocate("io.opentelemetry.javaagent.instrumentation.internal.classloader.stub", "java.lang")
3631
}
37-
38-
assemble {
39-
dependsOn(shadedJar)
40-
}
41-
}
42-
43-
// Create a consumable configuration for the shaded jar. We can't use the "shadow" configuration
44-
// because that is taken by the agent-testing.jar
45-
configurations {
46-
consumable("shaded") {
47-
attributes {
48-
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named("shaded"))
49-
}
50-
}
51-
}
52-
53-
artifacts {
54-
add("shaded", shadedJar)
5532
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,4 @@ tasks {
3232
// Prevents configuration naming conflict with other SLF4J instances
3333
relocate("org.slf4j", "io.opentelemetry.javaagent.slf4j")
3434
}
35-
36-
assemble {
37-
dependsOn(shadowJar)
38-
}
3935
}

javaagent/build.gradle.kts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,19 @@ val bootstrapLibs by configurations.creating {
2727
val baseJavaagentLibs by configurations.creating {
2828
isCanBeResolved = true
2929
isCanBeConsumed = false
30+
attributes {
31+
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.SHADOWED))
32+
}
33+
}
34+
// This compatibility rule allows to fall back to "regular jars" when a baseJavaagentLibs dependency doesn't have a "shadowed" bundling.
35+
abstract class ShadowedJarRule: AttributeCompatibilityRule<Bundling> {
36+
override fun execute(details: CompatibilityCheckDetails<Bundling>) = details.run {
37+
if (consumerValue?.name == Bundling.SHADOWED && producerValue?.name == Bundling.EXTERNAL) {
38+
compatible()
39+
}
40+
}
3041
}
42+
3143
// this configuration collects libs that will be placed in the agent classloader, isolated from the instrumented application code
3244
val javaagentLibs by configurations.creating {
3345
isCanBeResolved = true
@@ -54,6 +66,11 @@ val licenseReportDependencies by configurations.creating {
5466
}
5567

5668
dependencies {
69+
attributesSchema {
70+
attribute(Bundling.BUNDLING_ATTRIBUTE) {
71+
compatibilityRules.add(ShadowedJarRule::class.java)
72+
}
73+
}
5774
bootstrapLibs(project(":instrumentation-api"))
5875
// opentelemetry-api is an api dependency of :instrumentation-api, but opentelemetry-api-incubator is not
5976
bootstrapLibs("io.opentelemetry:opentelemetry-api-incubator")
@@ -74,7 +91,7 @@ dependencies {
7491

7592
baseJavaagentLibs(project(":javaagent-tooling"))
7693
baseJavaagentLibs(project(":javaagent-internal-logging-application"))
77-
baseJavaagentLibs(project(":javaagent-internal-logging-simple", configuration = "shadow"))
94+
baseJavaagentLibs(project(":javaagent-internal-logging-simple"))
7895
baseJavaagentLibs(project(":muzzle"))
7996
baseJavaagentLibs(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent"))
8097
baseJavaagentLibs(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.4:javaagent"))
@@ -94,7 +111,7 @@ dependencies {
94111
baseJavaagentLibs(project(":instrumentation:opentelemetry-instrumentation-annotations-1.16:javaagent"))
95112
baseJavaagentLibs(project(":instrumentation:executors:javaagent"))
96113
baseJavaagentLibs(project(":instrumentation:internal:internal-application-logger:javaagent"))
97-
baseJavaagentLibs(project(":instrumentation:internal:internal-class-loader:javaagent", configuration = "shaded"))
114+
baseJavaagentLibs(project(":instrumentation:internal:internal-class-loader:javaagent"))
98115
baseJavaagentLibs(project(":instrumentation:internal:internal-eclipse-osgi-3.6:javaagent"))
99116
baseJavaagentLibs(project(":instrumentation:internal:internal-lambda:javaagent"))
100117
baseJavaagentLibs(project(":instrumentation:internal:internal-reflection:javaagent"))

0 commit comments

Comments
 (0)