opentelemetry-java-instrume.../javaagent/javaagent.gradle

126 lines
4.0 KiB
Groovy

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
plugins {
id "com.github.johnrengelman.shadow"
}
description = 'OpenTelemetry Javaagent'
group = 'io.opentelemetry.javaagent'
apply from: "$rootDir/gradle/java.gradle"
apply from: "$rootDir/gradle/version.gradle"
apply from: "$rootDir/gradle/publish.gradle"
configurations {
shadowInclude
}
jar {
manifest {
attributes(
"Main-Class": "io.opentelemetry.javaagent.OpenTelemetryAgent",
"Agent-Class": "io.opentelemetry.javaagent.OpenTelemetryAgent",
"Premain-Class": "io.opentelemetry.javaagent.OpenTelemetryAgent",
"Can-Redefine-Classes": true,
"Can-Retransform-Classes": true,
)
}
}
CopySpec isolateSpec(Collection<Task> sourceTasks) {
return copySpec {
from(sourceTasks.collect { zipTree(it.archiveFile) }) {
// important to keep prefix 'inst' short, as it is prefixed to lots of strings in runtime mem
into 'inst'
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'
}
}
}
//Includes everything needed for OOTB experience
shadowJar {
def sourceTasks = [project(':instrumentation').tasks.shadowJar, project(':auto-exporters').tasks.shadowJar]
dependsOn sourceTasks
with isolateSpec(sourceTasks)
}
//Includes instrumentations, but not exporters
task lightShadow(type: ShadowJar) {
from sourceSets.main.output
def sourceTasks = [project(':instrumentation').tasks.shadowJar]
dependsOn sourceTasks
with isolateSpec(sourceTasks)
}
publishing {
publications {
maven(MavenPublication) {
artifact lightShadow
}
}
}
tasks.withType(ShadowJar).configureEach {
configurations = [project.configurations.shadowInclude]
mergeServiceFiles()
manifest {
inheritFrom project.tasks.jar.manifest
}
exclude '**/module-info.class'
// 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'
// prevents conflict with library instrumentation
relocate 'io.opentelemetry.instrumentation.api', 'io.opentelemetry.auto.shaded.instrumentation.api'
// relocate OpenTelemetry API
relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.auto.shaded.io.opentelemetry.OpenTelemetry"
relocate "io.opentelemetry.common", "io.opentelemetry.auto.shaded.io.opentelemetry.common"
relocate "io.opentelemetry.context", "io.opentelemetry.auto.shaded.io.opentelemetry.context"
relocate "io.opentelemetry.correlationcontext", "io.opentelemetry.auto.shaded.io.opentelemetry.correlationcontext"
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"
}
dependencies {
testImplementation project(':javaagent-bootstrap')
testImplementation project(':auto-api')
testImplementation project(':instrumentation-api')
testImplementation project(':utils:test-utils')
testImplementation deps.testLogging
testImplementation deps.guava
testImplementation 'io.opentracing.contrib.dropwizard:dropwizard-opentracing:0.2.2'
shadowInclude project(path: ':javaagent-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
}