diff --git a/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts b/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts index bfeb0ccbd4f7..6a69d6de01da 100644 --- a/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts +++ b/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts @@ -1,3 +1,5 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar + plugins { `java-library` @@ -48,7 +50,8 @@ val testInstrumentation by configurations.creating { isCanBeResolved = true } -tasks.shadowJar { +val agentTestingShadowJar by tasks.registering(ShadowJar::class) { + from(sourceSets.main.map { it.output }) configurations = listOf(project.configurations.runtimeClasspath.get(), testInstrumentation) archiveFileName.set("agent-testing.jar") @@ -101,10 +104,9 @@ class JavaagentTestArgumentsProvider( // need to run this after evaluate because testSets plugin adds new test tasks afterEvaluate { tasks.withType().configureEach { - val shadowJar = tasks.shadowJar.get() val agentShadowJar = agentForTesting.resolve().first() - dependsOn(shadowJar) + dependsOn(agentTestingShadowJar) // TODO: Figure out why dependsOn override is still needed in otel.javaagent-testing despite // this dependency. dependsOn(agentForTesting.buildDependencies) @@ -112,7 +114,7 @@ afterEvaluate { jvmArgumentProviders.add( JavaagentTestArgumentsProvider( agentShadowJar, - shadowJar.archiveFile.get().asFile + agentTestingShadowJar.get().archiveFile.get().asFile ) ) diff --git a/instrumentation/internal/internal-class-loader/javaagent-integration-tests/build.gradle.kts b/instrumentation/internal/internal-class-loader/javaagent-integration-tests/build.gradle.kts index 1a94bc8faf0d..a71640842b62 100644 --- a/instrumentation/internal/internal-class-loader/javaagent-integration-tests/build.gradle.kts +++ b/instrumentation/internal/internal-class-loader/javaagent-integration-tests/build.gradle.kts @@ -6,5 +6,5 @@ dependencies { compileOnly("org.apache.commons:commons-lang3:3.12.0") testImplementation("org.apache.commons:commons-lang3:3.12.0") - testInstrumentation(project(":instrumentation:internal:internal-class-loader:javaagent", configuration = "shaded")) + testInstrumentation(project(":instrumentation:internal:internal-class-loader:javaagent", configuration = "shadow")) } diff --git a/instrumentation/internal/internal-class-loader/javaagent/build.gradle.kts b/instrumentation/internal/internal-class-loader/javaagent/build.gradle.kts index bb56f554cf60..2dfba69f2202 100644 --- a/instrumentation/internal/internal-class-loader/javaagent/build.gradle.kts +++ b/instrumentation/internal/internal-class-loader/javaagent/build.gradle.kts @@ -25,31 +25,8 @@ dependencies { testImplementation("org.apache.felix:org.apache.felix.framework:6.0.2") } -val shadedJar by tasks.registering(ShadowJar::class) { - from(zipTree(tasks.jar.get().archiveFile)) - archiveClassifier.set("shaded") -} - tasks { withType(ShadowJar::class) { relocate("io.opentelemetry.javaagent.instrumentation.internal.classloader.stub", "java.lang") } - - assemble { - dependsOn(shadedJar) - } -} - -// Create a consumable configuration for the shaded jar. We can't use the "shadow" configuration -// because that is taken by the agent-testing.jar -configurations { - consumable("shaded") { - attributes { - attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named("shaded")) - } - } -} - -artifacts { - add("shaded", shadedJar) } diff --git a/javaagent-internal-logging-simple/build.gradle.kts b/javaagent-internal-logging-simple/build.gradle.kts index 55d10faa87b3..ab03d190cace 100644 --- a/javaagent-internal-logging-simple/build.gradle.kts +++ b/javaagent-internal-logging-simple/build.gradle.kts @@ -32,8 +32,4 @@ tasks { // Prevents configuration naming conflict with other SLF4J instances relocate("org.slf4j", "io.opentelemetry.javaagent.slf4j") } - - assemble { - dependsOn(shadowJar) - } } diff --git a/javaagent/build.gradle.kts b/javaagent/build.gradle.kts index f7631c36673a..d93d8d233377 100644 --- a/javaagent/build.gradle.kts +++ b/javaagent/build.gradle.kts @@ -27,7 +27,20 @@ val bootstrapLibs by configurations.creating { val baseJavaagentLibs by configurations.creating { isCanBeResolved = true isCanBeConsumed = false + attributes { + attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.SHADOWED)) + } +} + +// This compatibility rule allows to fall back to "regular jars" when a baseJavaagentLibs dependency doesn't have a "shadowed" bundling. +abstract class ShadowedJarRule : AttributeCompatibilityRule { + override fun execute(details: CompatibilityCheckDetails) = details.run { + if (consumerValue?.name == Bundling.SHADOWED && producerValue?.name == Bundling.EXTERNAL) { + compatible() + } + } } + // this configuration collects libs that will be placed in the agent classloader, isolated from the instrumented application code val javaagentLibs by configurations.creating { isCanBeResolved = true @@ -54,6 +67,11 @@ val licenseReportDependencies by configurations.creating { } dependencies { + attributesSchema { + attribute(Bundling.BUNDLING_ATTRIBUTE) { + compatibilityRules.add(ShadowedJarRule::class.java) + } + } bootstrapLibs(project(":instrumentation-api")) // opentelemetry-api is an api dependency of :instrumentation-api, but opentelemetry-api-incubator is not bootstrapLibs("io.opentelemetry:opentelemetry-api-incubator") @@ -74,7 +92,7 @@ dependencies { baseJavaagentLibs(project(":javaagent-tooling")) baseJavaagentLibs(project(":javaagent-internal-logging-application")) - baseJavaagentLibs(project(":javaagent-internal-logging-simple", configuration = "shadow")) + baseJavaagentLibs(project(":javaagent-internal-logging-simple")) baseJavaagentLibs(project(":muzzle")) baseJavaagentLibs(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent")) baseJavaagentLibs(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.4:javaagent")) @@ -94,7 +112,7 @@ dependencies { baseJavaagentLibs(project(":instrumentation:opentelemetry-instrumentation-annotations-1.16:javaagent")) baseJavaagentLibs(project(":instrumentation:executors:javaagent")) baseJavaagentLibs(project(":instrumentation:internal:internal-application-logger:javaagent")) - baseJavaagentLibs(project(":instrumentation:internal:internal-class-loader:javaagent", configuration = "shaded")) + baseJavaagentLibs(project(":instrumentation:internal:internal-class-loader:javaagent")) baseJavaagentLibs(project(":instrumentation:internal:internal-eclipse-osgi-3.6:javaagent")) baseJavaagentLibs(project(":instrumentation:internal:internal-lambda:javaagent")) baseJavaagentLibs(project(":instrumentation:internal:internal-reflection:javaagent")) diff --git a/licenses/licenses.md b/licenses/licenses.md index 2342c2dd0c44..add289141af5 100644 --- a/licenses/licenses.md +++ b/licenses/licenses.md @@ -59,11 +59,11 @@ **11** **Group:** `com.squareup.okio` **Name:** `okio` **Version:** `3.16.1` > - **POM Project URL**: [https://github.com/square/okio/](https://github.com/square/okio/) -> - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) +> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) **12** **Group:** `com.squareup.okio` **Name:** `okio-jvm` **Version:** `3.16.1` > - **POM Project URL**: [https://github.com/square/okio/](https://github.com/square/okio/) -> - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) +> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) **13** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.55.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)