Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ plugins {
id("com.github.spotbugs") version "6.5.5"
id("de.thetaphi.forbiddenapis") version "3.10"
id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
id("com.gradleup.shadow") version "8.3.9" apply false
id("com.gradleup.shadow") version "9.4.2" apply false

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: catalog?

id("me.champeau.jmh") version "0.7.3" apply false
id("org.gradle.playframework") version "0.16.0" apply false
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
plugins {
java
id("com.diffplug.spotless") version "8.4.0"
id("com.gradleup.shadow") version "8.3.9"
id("com.gradleup.shadow") version "9.4.2"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Would it make sense to move into catalog, since it used more in one place?

}

java {
Expand Down Expand Up @@ -69,7 +69,13 @@ tasks {
}

shadowJar {
duplicatesStrategy = DuplicatesStrategy.INCLUDE

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

q: may I know why INCLUDE was selected?

mergeServiceFiles()
// Service descriptors are intentionally merged by mergeServiceFiles(); let
// duplicate service entries reach that transformer instead of failing first.
filesNotMatching("META-INF/services/**") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
manifest {
attributes(mapOf("Main-Class" to "datadog.trace.plugin.csi.PluginApplication"))
}
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/modifiable-config-agent/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
java
id("com.gradleup.shadow") version "8.3.9"
id("com.gradleup.shadow") version "9.4.2"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: catalog?

}

java {
Expand Down
1 change: 0 additions & 1 deletion dd-java-agent/agent-aiguard/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,3 @@ tasks.named("shadowJar", ShadowJar) {
tasks.named("jar", Jar) {
archiveClassifier = 'unbundled'
}

23 changes: 0 additions & 23 deletions dd-java-agent/benchmark-integration/build.gradle
Original file line number Diff line number Diff line change
@@ -1,26 +1,3 @@
buildscript {
repositories {
mavenLocal()
if (project.rootProject.hasProperty("gradlePluginProxy")) {
maven {
url project.rootProject.property("gradlePluginProxy")
allowInsecureProtocol = true
}
}
if (project.rootProject.hasProperty("mavenRepositoryProxy")) {
maven {
url project.rootProject.property("mavenRepositoryProxy")
allowInsecureProtocol = true
}
}
gradlePluginPortal()
mavenCentral()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
}
}

apply from: "$rootDir/gradle/java.gradle"

description = 'Integration Level Agent benchmarks.'
Expand Down
30 changes: 25 additions & 5 deletions dd-java-agent/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,24 @@ dependencies {
def generalShadowJarConfig(ShadowJar shadowJarTask) {
shadowJarTask.with {
mergeServiceFiles()
addMultiReleaseAttribute = false

duplicatesStrategy = DuplicatesStrategy.FAIL
// Service descriptors are intentionally merged by mergeServiceFiles(); let
// duplicate service entries reach that transformer instead of failing first.
filesMatching('META-INF/services/**') {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
// Vendored dependencies often repeat license/notice metadata. Keep one copy
// while still failing on unexpected duplicate runtime resources and classes.
filesMatching([
'META-INF/LICENSE*',
'META-INF/NOTICE*',
'META-INF/AL2.0',
'META-INF/LGPL2.1',
]) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

// Remove some cruft from the final jar.
// These patterns should NOT include **/META-INF/maven/**/pom.properties, which is
Expand All @@ -99,6 +115,7 @@ def generalShadowJarConfig(ShadowJar shadowJarTask) {
exclude '**/inst/META-INF/versions/**'
exclude '**/META-INF/versions/*/org/yaml/**'
exclude '**/package.html'
exclude '**/about.html'

// Used to generate Java code during build, no need to include original file
exclude '**/*.trie'
Expand Down Expand Up @@ -257,7 +274,7 @@ includeSubprojShadowJar(project(':products:metrics:metrics-lib'), 'metrics', inc
includeSubprojShadowJar(project(':products:feature-flagging:feature-flagging-agent'), 'feature-flagging', includedJarFileTree)

def sharedShadowJar = tasks.register('sharedShadowJar', ShadowJar) {
it.configurations = [project.configurations.sharedShadowInclude]
it.configurations.add(project.configurations.named('sharedShadowInclude'))
// Put the jar in a different directory so we don't overwrite the normal shadow jar and
// break caching, and also to not interfere with CI scripts that copy everything in the
// libs directory
Expand All @@ -275,16 +292,16 @@ def sharedShadowJar = tasks.register('sharedShadowJar', ShadowJar) {
exclude(project(':utils:time-utils'))
exclude(project(':products:metrics:metrics-api'))
exclude(project(':products:metrics:metrics-agent'))
exclude(dependency('org.slf4j::'))
exclude(dependency('org.slf4j:.*:.*'))
// use dd-instrument-java's embedded copy of asm
exclude(dependency('org.ow2.asm:asm:'))
exclude(dependency('org.ow2.asm:asm:.*'))
}
}
includeShadowJar(sharedShadowJar, 'shared', includedJarFileTree)

// place the tracer in its own shadow jar separate to instrumentation
def traceShadowJar = tasks.register('traceShadowJar', ShadowJar) {
it.configurations = [project.configurations.traceShadowInclude]
it.configurations.add(project.configurations.named('traceShadowInclude'))
it.destinationDirectory.set(project.layout.buildDirectory.dir("trace-lib"))
it.archiveClassifier = 'trace'
it.dependencies deps.excludeShared
Expand All @@ -299,7 +316,10 @@ tasks.named("shadowJar", ShadowJar) {

generalShadowJarConfig(it)

configurations = [project.configurations.shadowInclude]
// The default shadowJar task has a runtimeClasspath convention. Replace it
// instead of adding to it, otherwise runtimeClasspath would be bundled too.
configurations.empty()
configurations.add(project.configurations.named('shadowInclude'))

archiveClassifier = ''

Expand Down
6 changes: 2 additions & 4 deletions dd-java-agent/ddprof-lib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@ dependencies {
}

tasks.named("shadowJar", ShadowJar) {
dependencies {
deps.excludeShared
exclude '**/*.debug'
}
dependencies deps.excludeShared
exclude '**/*.debug'
archiveClassifier = 'all'
include {
def rslt = false
Expand Down
26 changes: 25 additions & 1 deletion dd-java-agent/instrumentation/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -120,13 +120,37 @@ if (project.gradle.startParameter.taskNames.any { it.endsWith("generateMuzzleRep

tasks.named('shadowJar', ShadowJar) {
duplicatesStrategy = DuplicatesStrategy.FAIL
// Shadow 8.x silently wrote duplicate class (130+) entries into the instrumentation jar.
// Those duplicate entries did not survive as duplicates in the final agent jar,
// because `:dd-java-agent:expandAgentShadowJarInst` expands the instrumentation jar
// with a `Sync` task, and the specific `inst` expansion keeps the first duplicate path.
// (explicit `duplicatesStrategy = DuplicatesStrategy.EXCLUDE` on the `inst` prefix).
//
// Shadow 9 refactored deeply it's "copy" pipeline via https://github.com/GradleUp/shadow/pull/1233
// by `Project.zipTree` and can now honor `DuplicatesStrategy`, see in particular
// * https://github.com/GradleUp/shadow/issues/1223 - Duplicates from jars are not handled per duplicatesStrategy
// * https://github.com/GradleUp/shadow/issues/488 - DuplicatesStrategy.FAIL doesn't work with transform
//
// Keeping `duplicatesStrategy = FAIL` only, Shadow 9 now fails while creating the instrumentation jar.
filesMatching([
// agent-installer also publishes this Java 11 source-set output at runtime.
'datadog/trace/agent/tooling/bytebuddy/DDJava9ClassFileTransformer*.class',
// agent-installer also publishes this Java 25 source-set output at runtime.
'datadog/trace/agent/tooling/servicediscovery/MemFDUnixWriterFFM*.class',
// aggregate instrumentation includes some classes directly and via jars.
'datadog/trace/instrumentation/**/*.class',
// same aggregate duplication, for Java 11 exception profiling advice.
'datadog/exceptions/instrumentation/**/*.class',
]) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
Comment on lines +135 to +146

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: I asked codex to give me the list of the duplicate classes


Shadow Instrumentation Duplicate Classes

Generated from a temporary :dd-java-agent:instrumentation:shadowJar run with duplicate handling forced to INCLUDE.

The verbose origin check showed no meaningful difference between duplicate origins: class-output/runtime-artifact pairs have identical origin hashes, and the servlet5 runtime-artifact/runtime-file-dependency pairs are also identical. The list is therefore grouped by owning module.

  • Duplicate class paths: 140
  • Origin hash mismatches: 0

:dd-java-agent:agent-installer

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 3

  • datadog/trace/agent/tooling/bytebuddy/DDJava9ClassFileTransformer.class

  • datadog/trace/agent/tooling/servicediscovery/MemFDUnixWriterFFM$Lazy.class

  • datadog/trace/agent/tooling/servicediscovery/MemFDUnixWriterFFM.class

:dd-java-agent:instrumentation:datadog:profiling:exception-profiling

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 2

  • datadog/exceptions/instrumentation/ExclusionAdvice.class

  • datadog/exceptions/instrumentation/ThrowableInstanceAdvice.class

:dd-java-agent:instrumentation:graal:graal-native-image-20.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 1

  • datadog/trace/instrumentation/graal/nativeimage/DeleteFieldAdvice.class

:dd-java-agent:instrumentation:java:java-lang:java-lang-22.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 3

  • datadog/trace/instrumentation/java/lang/jdk22/CaptureLibraryNameAdvice.class

  • datadog/trace/instrumentation/java/lang/jdk22/CaptureSymbolAddressAdvice.class

  • datadog/trace/instrumentation/java/lang/jdk22/DownCallWrapAdvice.class

:dd-java-agent:instrumentation:java:java-net:java-net-11.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 9

  • datadog/trace/instrumentation/httpclient/BodyHandlerWrapper$BodySubscriberWrapper.class

  • datadog/trace/instrumentation/httpclient/BodyHandlerWrapper.class

  • datadog/trace/instrumentation/httpclient/CompletableFutureWrapper.class

  • datadog/trace/instrumentation/httpclient/HeadersAdvice.class

  • datadog/trace/instrumentation/httpclient/HttpHeadersInjectAdapter.class

  • datadog/trace/instrumentation/httpclient/JavaNetClientDecorator.class

  • datadog/trace/instrumentation/httpclient/ResponseConsumer.class

  • datadog/trace/instrumentation/httpclient/SendAdvice.class

  • datadog/trace/instrumentation/httpclient/SendAsyncAdvice.class

:dd-java-agent:instrumentation:java:java-nio-1.8

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 3

  • datadog/trace/instrumentation/directbytebuffer/AllocateDirectAdvice.class

  • datadog/trace/instrumentation/directbytebuffer/MemoryMappingAdvice.class

  • datadog/trace/instrumentation/directbytebuffer/NewDirectByteBufferAdvice.class

:dd-java-agent:instrumentation:jetty:jetty-client:jetty-client-10.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 4

  • datadog/trace/instrumentation/jetty_client10/JettyClientDecorator.class

  • datadog/trace/instrumentation/jetty_client10/SendAdvice.class

  • datadog/trace/instrumentation/jetty_client10/SendContextPropagationAdvice.class

  • datadog/trace/instrumentation/jetty_client10/SpanFinishingCompleteListener.class

:dd-java-agent:instrumentation:jetty:jetty-client:jetty-client-12.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 8

  • datadog/trace/instrumentation/jetty_client12/CallbackWrapper.class

  • datadog/trace/instrumentation/jetty_client12/HeadersInjectAdapter.class

  • datadog/trace/instrumentation/jetty_client12/JettyClientDecorator.class

  • datadog/trace/instrumentation/jetty_client12/RequestCreateAdvice.class

  • datadog/trace/instrumentation/jetty_client12/SendAdvice.class

  • datadog/trace/instrumentation/jetty_client12/SendContextPropagationAdvice.class

  • datadog/trace/instrumentation/jetty_client12/SpanFinishingCompleteListener.class

  • datadog/trace/instrumentation/jetty_client12/WrapListenerAdvice.class

:dd-java-agent:instrumentation:jetty:jetty-server:jetty-server-10.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 18

  • datadog/trace/instrumentation/jetty10/DispatchableAdvice.class

  • datadog/trace/instrumentation/jetty10/ExtractAdapter$Request.class

  • datadog/trace/instrumentation/jetty10/ExtractAdapter$Response.class

  • datadog/trace/instrumentation/jetty10/ExtractAdapter.class

  • datadog/trace/instrumentation/jetty10/HandleAdvice$ContextTrackingAdvice.class

  • datadog/trace/instrumentation/jetty10/HandleAdvice.class

  • datadog/trace/instrumentation/jetty10/HandleExceptionAdvice.class

  • datadog/trace/instrumentation/jetty10/JettyCommitResponseHelper.class

  • datadog/trace/instrumentation/jetty10/JettyDecorator$OnResponse.class

  • datadog/trace/instrumentation/jetty10/JettyDecorator.class

  • datadog/trace/instrumentation/jetty10/JettyOnCommitBlockingHelper$CloseCallback.class

  • datadog/trace/instrumentation/jetty10/JettyOnCommitBlockingHelper.class

  • datadog/trace/instrumentation/jetty10/ResetAdvice.class

  • datadog/trace/instrumentation/jetty10/SendResponseCbAdvice.class

  • datadog/trace/instrumentation/jetty10/ServerHandleAdvice.class

  • datadog/trace/instrumentation/jetty10/SetContextPathAdvice.class

  • datadog/trace/instrumentation/jetty10/SetRequestedSessionIdAdvice.class

  • datadog/trace/instrumentation/jetty10/SetServletPathAdvice.class

:dd-java-agent:instrumentation:jetty:jetty-server:jetty-server-11.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 11

  • datadog/trace/instrumentation/jetty11/ExtractAdapter$Request.class

  • datadog/trace/instrumentation/jetty11/ExtractAdapter$Response.class

  • datadog/trace/instrumentation/jetty11/ExtractAdapter.class

  • datadog/trace/instrumentation/jetty11/JettyDecorator.class

  • datadog/trace/instrumentation/jetty11/JettyServerAdvice$ContextTrackingAdvice.class

  • datadog/trace/instrumentation/jetty11/JettyServerAdvice$HandleAdvice.class

  • datadog/trace/instrumentation/jetty11/JettyServerAdvice$ResetAdvice.class

  • datadog/trace/instrumentation/jetty11/JettyServerAdvice.class

  • datadog/trace/instrumentation/jetty11/RequestURIDataAdapter.class

  • datadog/trace/instrumentation/jetty11/SetContextPathAdvice.class

  • datadog/trace/instrumentation/jetty11/SetRequestedSessionIdAdvice.class

:dd-java-agent:instrumentation:jetty:jetty-server:jetty-server-12.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 12

  • datadog/trace/instrumentation/jetty12/ExtractAdapter$Request.class

  • datadog/trace/instrumentation/jetty12/ExtractAdapter$Response.class

  • datadog/trace/instrumentation/jetty12/ExtractAdapter.class

  • datadog/trace/instrumentation/jetty12/JettyDecorator.class

  • datadog/trace/instrumentation/jetty12/JettyRunnableWrapper.class

  • datadog/trace/instrumentation/jetty12/JettyServerAdvice$ContextTrackingAdvice.class

  • datadog/trace/instrumentation/jetty12/JettyServerAdvice$HandleAdvice.class

  • datadog/trace/instrumentation/jetty12/JettyServerAdvice$ResetAdvice.class

  • datadog/trace/instrumentation/jetty12/JettyServerAdvice.class

  • datadog/trace/instrumentation/jetty12/RequestURIDataAdapter.class

  • datadog/trace/instrumentation/jetty12/ResolveRequestedSessionIdAdvice.class

  • datadog/trace/instrumentation/jetty12/SetContextPathAdvice.class

:dd-java-agent:instrumentation:kafka:kafka-clients-3.8

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 29

  • datadog/trace/instrumentation/kafka_clients38/AvroSchemaExtractor.class

  • datadog/trace/instrumentation/kafka_clients38/ConstructorAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/ConsumerCoordinatorAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/DDOffsetCommitCallback.class

  • datadog/trace/instrumentation/kafka_clients38/IterableAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/IteratorAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/KafkaConsumerInfo.class

  • datadog/trace/instrumentation/kafka_clients38/KafkaConsumerInstrumentationHelper.class

  • datadog/trace/instrumentation/kafka_clients38/KafkaDecorator.class

  • datadog/trace/instrumentation/kafka_clients38/KafkaProducerCallback.class

  • datadog/trace/instrumentation/kafka_clients38/LegacyConstructorAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/ListAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/MetadataUpdate22AndAfterAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/MetadataUpdateBefore22Advice.class

  • datadog/trace/instrumentation/kafka_clients38/NoopTextMapInjectAdapter.class

  • datadog/trace/instrumentation/kafka_clients38/OffsetCommitCallbackInvokerAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/PayloadSizeAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/ProducerAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/ProducerConstructorAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/ProducerContextPropagationAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/RecordsAdvice.class

  • datadog/trace/instrumentation/kafka_clients38/TextMapExtractAdapter.class

  • datadog/trace/instrumentation/kafka_clients38/TextMapInjectAdapter.class

  • datadog/trace/instrumentation/kafka_clients38/TextMapInjectAdapterInterface.class

  • datadog/trace/instrumentation/kafka_clients38/TracingIterable.class

  • datadog/trace/instrumentation/kafka_clients38/TracingIterableDelegator.class

  • datadog/trace/instrumentation/kafka_clients38/TracingIterator.class

  • datadog/trace/instrumentation/kafka_clients38/TracingList.class

  • datadog/trace/instrumentation/kafka_clients38/TracingListIterator.class

:dd-java-agent:instrumentation:micronaut:micronaut-http-server-netty:micronaut-http-server-netty-4.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 8

  • datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice.class

  • datadog/trace/instrumentation/micronaut/v4_0/ChannelAcceptAdvice2.class

  • datadog/trace/instrumentation/micronaut/v4_0/CreateDefaultErrorResponseAdvice.class

  • datadog/trace/instrumentation/micronaut/v4_0/EncodeHttpResponseAdvice.class

  • datadog/trace/instrumentation/micronaut/v4_0/EncodeHttpResponseAdvice2.class

  • datadog/trace/instrumentation/micronaut/v4_0/EncodeHttpResponseAdvice3.class

  • datadog/trace/instrumentation/micronaut/v4_0/HandleRouteMatchAdvice.class

  • datadog/trace/instrumentation/micronaut/v4_0/MicronautDecorator.class

:dd-java-agent:instrumentation:servlet:jakarta-servlet-5.0

  • Duplicate source: runtime artifact + runtime file dependency

  • Duplicate class paths: 6

  • datadog/trace/instrumentation/servlet5/AbstractServletInputStreamWrapper.class

  • datadog/trace/instrumentation/servlet5/BufferedReaderWrapper.class

  • datadog/trace/instrumentation/servlet5/HttpServletGetInputStreamAdvice.class

  • datadog/trace/instrumentation/servlet5/HttpServletGetReaderAdvice.class

  • datadog/trace/instrumentation/servlet5/Servlet31InputStreamWrapper.class

  • datadog/trace/instrumentation/servlet5/ServletBlockingHelper.class

:dd-java-agent:instrumentation:spring:spring-webmvc:spring-webmvc-6.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 18

  • datadog/trace/instrumentation/springweb6/ControllerAdvice.class

  • datadog/trace/instrumentation/springweb6/ErrorHandlerAdvice.class

  • datadog/trace/instrumentation/springweb6/FilterInjectingAdvice.class

  • datadog/trace/instrumentation/springweb6/HandleMatchAdvice.class

  • datadog/trace/instrumentation/springweb6/HandlerMappingAdvice.class

  • datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter$BeanDefinition.class

  • datadog/trace/instrumentation/springweb6/HandlerMappingResourceNameFilter.class

  • datadog/trace/instrumentation/springweb6/InterceptorPreHandleAdvice.class

  • datadog/trace/instrumentation/springweb6/OrderedServletPathRequestFilter$BeanDefinition.class

  • datadog/trace/instrumentation/springweb6/OrderedServletPathRequestFilter.class

  • datadog/trace/instrumentation/springweb6/PairList.class

  • datadog/trace/instrumentation/springweb6/PathMatchingHttpServletRequestWrapper.class

  • datadog/trace/instrumentation/springweb6/RenderAdvice.class

  • datadog/trace/instrumentation/springweb6/ResourceNameFilterMappingAdvice.class

  • datadog/trace/instrumentation/springweb6/ServletPathFilterInjectingAdvice.class

  • datadog/trace/instrumentation/springweb6/ServletRequestURIAdapter.class

  • datadog/trace/instrumentation/springweb6/SpringWebHttpServerDecorator.class

  • datadog/trace/instrumentation/springweb6/WrapContinuableResultAdvice.class

:dd-java-agent:instrumentation:websocket:jetty-websocket:jetty-websocket-10.0

  • Duplicate source: class output + runtime artifact

  • Duplicate class paths: 5

  • datadog/trace/instrumentation/websocket/jetty10/MethodHandleWrappers.class

  • datadog/trace/instrumentation/websocket/jetty10/WebSocketAdvices$MessageSinkAdvice.class

  • datadog/trace/instrumentation/websocket/jetty10/WebSocketAdvices$OpenClose10Advice.class

  • datadog/trace/instrumentation/websocket/jetty10/WebSocketAdvices$OpenClose9Advice.class

  • datadog/trace/instrumentation/websocket/jetty10/WebSocketAdvices.class

dependencies {
// the tracer is now in a separate shadow jar
exclude(project(":dd-trace-core"))
exclude(dependency('com.datadoghq:sketches-java'))
exclude(dependency('com.google.re2j:re2j'))
deps.excludeShared.execute(it)
}
dependencies deps.excludeShared
}

// temporary config to add slf4j-simple so we get logging from instrumenters while indexing
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,10 @@ tasks.named('filterLogbackClassic', Sync) {
}

tasks.named("shadowJar", ShadowJar) {
configurations = [project.configurations.shadow]
// The default shadowJar task has a runtimeClasspath convention. Replace it
// instead of adding to it; this jar is intentionally built from the shadow configuration only.
configurations.empty()
configurations.add(project.configurations.named('shadow'))
zip64 = true

archiveFileName = 'openliberty-shadow.jar'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ tasks.register('relocatedJavaxJar', ShadowJar) {

archiveClassifier.set('relocated-javax')

configurations = [project.configurations.javaxClassesToRelocate]
configurations.add(project.configurations.named('javaxClassesToRelocate'))

include '**/*.jar'
include '**/Servlet31InputStreamWrapper.class'
Expand Down
4 changes: 2 additions & 2 deletions dd-java-agent/testing/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ tasks.named("shadowJar", ShadowJar) {
// Only bundle jetty dependencies into the jar (relocated)
// All other dependencies remain as transitive dependencies
dependencies {
include(dependency {
include {
it.moduleGroup == 'org.eclipse.jetty' || it.moduleGroup == 'org.eclipse.jetty.http2'
})
}
}

// Relocate jetty classes to avoid conflicts with instrumented versions
Expand Down
20 changes: 18 additions & 2 deletions dd-smoke-tests/appsec/springboot-graphql/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer

plugins {
id 'com.gradleup.shadow'
Expand All @@ -16,8 +17,23 @@ jar {
}

shadowJar {
mergeServiceFiles {
include 'META-INF/spring.*'
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
append 'META-INF/spring.handlers'
append 'META-INF/spring.schemas'
append 'META-INF/spring.tooling'
transform(PropertiesFileTransformer) {
paths = ['META-INF/spring.factories']
mergeStrategy = "append"
}
filesNotMatching([
'META-INF/services/**',
'META-INF/spring.handlers',
'META-INF/spring.schemas',
'META-INF/spring.tooling',
'META-INF/spring.factories',
]) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
}

Expand Down
2 changes: 1 addition & 1 deletion dd-smoke-tests/custom-systemloader/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ tasks.named("jar", Jar) {
}

tasks.named("shadowJar", ShadowJar) {
configurations = [project.configurations.runtimeClasspath]
configurations.add(project.configurations.named('runtimeClasspath'))
}

dependencies {
Expand Down
2 changes: 1 addition & 1 deletion dd-smoke-tests/field-injection/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ tasks.named("jar", Jar) {
}

tasks.named("shadowJar", ShadowJar) {
configurations = [project.configurations.runtimeClasspath]
configurations.add(project.configurations.named('runtimeClasspath'))
}

dependencies {
Expand Down
4 changes: 4 additions & 0 deletions dd-smoke-tests/grpc-1.5/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,12 @@ protobuf {
}

tasks.withType(ShadowJar).configureEach {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
archiveClassifier.set("fat")
mergeServiceFiles()
filesNotMatching('META-INF/services/**') {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
}

tasks.withType(Test).configureEach {
Expand Down
2 changes: 1 addition & 1 deletion dd-smoke-tests/iast-propagation/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ tasks.named("jar", Jar) {
}

tasks.named("shadowJar", ShadowJar) {
configurations = [project.configurations.runtimeClasspath]
configurations.add(project.configurations.named('runtimeClasspath'))
}

dependencies {
Expand Down
5 changes: 3 additions & 2 deletions dd-smoke-tests/log-injection/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,9 @@ def generateTestingJar(String interfaceName, String backend, List<NamedDomainObj

archiveBaseName.set(name)

configurations = [project.configurations.named('runtimeClasspath').get()] + configurationProviders.collect { it.get() }
configurations = providers.provider {
[project.configurations.named('runtimeClasspath').get()] + configurationProviders.collect { it.get() }
}
}
}

Expand Down Expand Up @@ -392,4 +394,3 @@ tasks.withType(Test).configureEach {
.get()
}


12 changes: 11 additions & 1 deletion dd-smoke-tests/spring-boot-2.3-webmvc-jetty/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ tasks.named("jar", Jar) {
}

tasks.named("shadowJar", ShadowJar) {
configurations = [project.configurations.runtimeClasspath]
configurations.add(project.configurations.named('runtimeClasspath'))
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
append 'META-INF/spring.handlers'
append 'META-INF/spring.schemas'
Expand All @@ -26,6 +27,15 @@ tasks.named("shadowJar", ShadowJar) {
paths = ['META-INF/spring.factories']
mergeStrategy = "append"
}
filesNotMatching([
'META-INF/services/**',
'META-INF/spring.handlers',
'META-INF/spring.schemas',
'META-INF/spring.tooling',
'META-INF/spring.factories',
]) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
}

dependencies {
Expand Down
2 changes: 1 addition & 1 deletion dd-smoke-tests/spring-boot-2.4-webflux/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ tasks.named("jar", Jar) {
}

tasks.named("shadowJar", ShadowJar) {
configurations = [project.configurations.runtimeClasspath]
configurations.add(project.configurations.named('runtimeClasspath'))
}

dependencies {
Expand Down
2 changes: 1 addition & 1 deletion dd-smoke-tests/spring-boot-2.5-webflux/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ tasks.named("jar", Jar) {
}

tasks.named("shadowJar", ShadowJar) {
configurations = [project.configurations.runtimeClasspath]
configurations.add(project.configurations.named('runtimeClasspath'))
}

dependencies {
Expand Down
12 changes: 11 additions & 1 deletion dd-smoke-tests/spring-boot-2.6-webflux/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ tasks.named("jar", Jar) {
}

tasks.named("shadowJar", ShadowJar) {
configurations = [project.configurations.runtimeClasspath]
configurations.add(project.configurations.named('runtimeClasspath'))
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
append 'META-INF/spring.handlers'
append 'META-INF/spring.schemas'
Expand All @@ -26,6 +27,15 @@ tasks.named("shadowJar", ShadowJar) {
paths = ['META-INF/spring.factories']
mergeStrategy = "append"
}
filesNotMatching([
'META-INF/services/**',
'META-INF/spring.handlers',
'META-INF/spring.schemas',
'META-INF/spring.tooling',
'META-INF/spring.factories',
]) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
Comment on lines +30 to +38

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Q: this pattern looks like repeating several times, any ideas how to reuse code?

}

dependencies {
Expand Down
Loading
Loading