plugins { id "com.github.johnrengelman.shadow" version "5.2.0" } description = 'java-agent' apply from: "${rootDir}/gradle/java.gradle" configurations { shadowInclude } /* * Include subproject's shadowJar in the java-agent jar. * Note jarname must not end with '.jar', or its classes will be on the classpath of * the java-agent jar. */ def includeShadowJar(subproject, jarname) { def agent_project = project subproject.afterEvaluate { agent_project.processResources { from(zipTree(subproject.tasks.shadowJar.archiveFile)) { into jarname rename '(^.*)\\.class$', '$1.classdata' // Rename LICENSE file since it clashes with license dir on non-case sensitive FSs (i.e. Mac) rename '^LICENSE$', 'LICENSE.renamed' } } agent_project.processResources.dependsOn subproject.tasks.shadowJar subproject.shadowJar { mergeServiceFiles() exclude '**/module-info.class' dependencies { exclude(dependency("org.projectlombok:lombok:$versions.lombok")) } // Prevents conflict with other SLF4J instances. Important for premain. relocate 'org.slf4j', 'io.opentelemetry.auto.slf4j' // rewrite dependencies calling Logger.getLogger relocate 'java.util.logging.Logger', 'io.opentelemetry.auto.bootstrap.PatchLogger' } } } includeShadowJar(project(':java-agent:instrumentation'), 'agent-tooling-and-instrumentation.isolated') jar { archiveClassifier = 'unbundled' manifest { attributes( "Main-Class": "io.opentelemetry.auto.bootstrap.AgentBootstrap", "Agent-Class": "io.opentelemetry.auto.bootstrap.AgentBootstrap", "Premain-Class": "io.opentelemetry.auto.bootstrap.AgentBootstrap", "Can-Redefine-Classes": true, "Can-Retransform-Classes": true, ) } } shadowJar { configurations = [project.configurations.shadowInclude] archiveClassifier = '' mergeServiceFiles() exclude '**/module-info.class' dependencies { exclude(dependency("org.projectlombok:lombok:$versions.lombok")) } // Prevents conflict with other SLF4J instances. Important for premain. relocate 'org.slf4j', 'io.opentelemetry.auto.slf4j' // rewrite dependencies calling Logger.getLogger relocate 'java.util.logging.Logger', 'io.opentelemetry.auto.bootstrap.PatchLogger' // relocate OpenTelemetry API relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.auto.shaded.io.opentelemetry.OpenTelemetry" relocate "io.opentelemetry.context", "io.opentelemetry.auto.shaded.io.opentelemetry.context" relocate "io.opentelemetry.distributedcontext", "io.opentelemetry.auto.shaded.io.opentelemetry.distributedcontext" relocate "io.opentelemetry.internal", "io.opentelemetry.auto.shaded.io.opentelemetry.internal" relocate "io.opentelemetry.metrics", "io.opentelemetry.auto.shaded.io.opentelemetry.metrics" relocate "io.opentelemetry.trace", "io.opentelemetry.auto.shaded.io.opentelemetry.trace" // relocate OpenTelemetry API dependency relocate "io.grpc", "io.opentelemetry.auto.shaded.io.grpc" // relocate OpenTelemetry SDK relocate "io.opentelemetry.sdk", "io.opentelemetry.auto.shaded.io.opentelemetry.sdk" } dependencies { testCompile project(':java-agent:agent-bootstrap') testCompile project(':trace-api') testCompile project(':utils:gc-utils') testCompile deps.testLogging testCompile deps.guava shadowInclude project(path: ':java-agent:agent-bootstrap') } tasks.withType(Test).configureEach { // Multi-threaded logging seems to be causing deadlocks with Gradle's log capture. // jvmArgs "-Dio.opentelemetry.auto.slf4j.simpleLogger.defaultLogLevel=debug" // jvmArgs "-Dorg.slf4j.simpleLogger.defaultLogLevel=debug" doFirst { // Defining here to allow jacoco to be first on the command line. jvmArgs "-javaagent:${shadowJar.archivePath}" } testLogging { events "started" } dependsOn shadowJar }