diff --git a/dd-java-agent/instrumentation/build.gradle b/dd-java-agent/instrumentation/build.gradle index 5d3657d6c34..85c8cdb7b70 100644 --- a/dd-java-agent/instrumentation/build.gradle +++ b/dd-java-agent/instrumentation/build.gradle @@ -1,3 +1,6 @@ +import static org.gradle.api.plugins.JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME +import static org.gradle.api.tasks.SourceSet.MAIN_SOURCE_SET_NAME + import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { @@ -11,51 +14,56 @@ tasks.register("latestDepTest", Test) Project parent_project = project subprojects { Project subProj -> - apply plugin: 'dd-trace-java.instrument' - apply plugin: 'dd-trace-java.muzzle' - - configurations { - instrumentPluginClasspath { - visible = false - canBeConsumed = false - canBeResolved = true + subProj.pluginManager.withPlugin("dd-trace-java.instrument") { + subProj.extensions.configure(InstrumentExtension) { + it.plugins.addAll( + 'datadog.trace.agent.tooling.muzzle.MuzzleGradlePlugin', + 'datadog.trace.agent.tooling.bytebuddy.NewTaskForGradlePlugin', + 'datadog.trace.agent.tooling.bytebuddy.reqctx.RewriteRequestContextAdvicePlugin', + ) } - } - instrument.plugins = [ - 'datadog.trace.agent.tooling.muzzle.MuzzleGradlePlugin', - 'datadog.trace.agent.tooling.bytebuddy.NewTaskForGradlePlugin', - 'datadog.trace.agent.tooling.bytebuddy.reqctx.RewriteRequestContextAdvicePlugin', - ] + subProj.configurations.register("instrumentPluginClasspath") { + it.visible = false + it.canBeConsumed = false + it.canBeResolved = true - subProj.tasks.withType(Javadoc).configureEach { enabled = false } + it.dependencies.add(subProj.dependencies.project(path: ':dd-java-agent:agent-tooling', configuration: 'instrumentPluginClasspath')) + } + } - subProj.afterEvaluate { - if (!plugins.hasPlugin("java")) { - return + subProj.pluginManager.withPlugin("java") { + subProj.pluginManager.withPlugin("dd-trace-java.muzzle") { + subProj.configurations.matching { it.name == 'muzzleBootstrap' }.configureEach { + exclude group: 'org.snakeyaml', module: 'snakeyaml-engine' // we vendor this in the agent jar + } } + subProj.tasks.withType(Javadoc).configureEach { enabled = false } + // Configures base dependencies for additional sourceSet - configurations - .matching { it.name.matches("${SourceSet.MAIN_SOURCE_SET_NAME}_java\\d+${JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME.capitalize()}") } + subProj.configurations + .matching { it.name.matches("${MAIN_SOURCE_SET_NAME}_java\\d+${IMPLEMENTATION_CONFIGURATION_NAME.capitalize()}") } .configureEach { - it.dependencies.add(project.dependencyFactory.create(project(':dd-trace-api'))) - it.dependencies.add(project.dependencyFactory.create(project(':dd-java-agent:agent-tooling'))) + it.dependencies.add(subProj.dependencyFactory.create(project(':dd-trace-api'))) + it.dependencies.add(subProj.dependencyFactory.create(project(':dd-java-agent:agent-tooling'))) it.dependencies.addLater(libs.bytebuddy) } - configurations.named('muzzleBootstrap') { - exclude group: 'org.snakeyaml', module: 'snakeyaml-engine' // we vendor this in the agent jar - } dependencies { + // Main + annotationProcessor project(':dd-java-agent:instrumentation-annotation-processor') + annotationProcessor libs.autoservice.processor + compileOnly libs.autoservice.annotation + // Apply common dependencies for instrumentation. implementation project(':dd-trace-api') implementation project(':dd-java-agent:agent-tooling') implementation libs.bytebuddy - annotationProcessor project(':dd-java-agent:instrumentation-annotation-processor') - annotationProcessor libs.autoservice.processor - compileOnly libs.autoservice.annotation + // Tests + testAnnotationProcessor libs.autoservice.processor + testCompileOnly libs.autoservice.annotation // Include instrumentations instrumenting core JDK classes to ensure interoperability with other instrumentation testImplementation project(':dd-java-agent:instrumentation:java:java-concurrent:java-concurrent-1.8') @@ -64,10 +72,6 @@ subprojects { Project subProj -> testImplementation project(':dd-java-agent:instrumentation:classloading') testImplementation project(':dd-java-agent:instrumentation-testing') - testAnnotationProcessor libs.autoservice.processor - testCompileOnly libs.autoservice.annotation - - instrumentPluginClasspath project(path: ':dd-java-agent:agent-tooling', configuration: 'instrumentPluginClasspath') } subProj.tasks.withType(Test).configureEach { subTask -> @@ -75,17 +79,17 @@ subprojects { Project subProj -> subTask.jvmArgs '-Dtest.dd.latestDepTest=true' } } - } - def path = subProj.getPath() - subProj.plugins.withId("java") { - if (!path.equals(':dd-java-agent:instrumentation:vertx:vertx-redis-client:vertx-redis-client-stubs')) { - // don't include the redis RequestImpl stub + if (subProj.path != ':dd-java-agent:instrumentation:vertx:vertx-redis-client:vertx-redis-client-stubs') { + // don't include the redis RequestImpl stubs parent_project.dependencies { - implementation project(path) + addProvider("implementation", providers.provider { project(subProj.path) }) } } } + + subProj.apply plugin: 'dd-trace-java.instrument' + subProj.apply plugin: 'dd-trace-java.muzzle' } dependencies {