Skip to content

Commit be26899

Browse files
committed
fix: Proper shadowing of jetty in agent-testing
1 parent 8680447 commit be26899

File tree

8 files changed

+26
-89
lines changed

8 files changed

+26
-89
lines changed

dd-java-agent/instrumentation/dropwizard/build.gradle

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,6 @@ dependencies {
1111
testImplementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.2.3'
1212
testImplementation group: 'com.fasterxml.jackson.module', name: 'jackson-module-afterburner', version: '2.9.10'
1313

14-
constraints {
15-
// Don't want to conflict with jetty from the test server.
16-
testImplementation('org.eclipse.jetty:jetty-server') {
17-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
18-
version {
19-
strictly '9.2.9.v20150224'
20-
}
21-
}
22-
testImplementation('org.eclipse.jetty:jetty-servlet') {
23-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
24-
version {
25-
strictly '9.2.9.v20150224'
26-
}
27-
}
28-
}
29-
3014
// Anything 1.0+ fails with a java.lang.NoClassDefFoundError: org/eclipse/jetty/server/RequestLog
3115
// latestDepTestImplementation group: 'io.dropwizard', name: 'dropwizard-testing', version: '1.+'
3216
}

dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-9.1/build.gradle

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,6 @@ dependencies {
5454
testImplementation project(':dd-java-agent:instrumentation:jetty:jetty-util-9.4.31')
5555
testImplementation group: 'org.eclipse.jetty', name: 'jetty-client', version: '9.1.0.v20131115'
5656
testImplementation group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.1.0.v20131115'
57-
constraints {
58-
testImplementation('org.eclipse.jetty:jetty-server') {
59-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
60-
version {
61-
strictly '9.1.0.v20131115'
62-
}
63-
}
64-
testImplementation('org.eclipse.jetty:jetty-servlet') {
65-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
66-
version {
67-
strictly '9.1.0.v20131115'
68-
}
69-
}
70-
}
7157

7258
latestDepTestImplementation group: 'org.eclipse.jetty', name: 'jetty-client', version: '9.+'
7359
latestDepTestImplementation group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.+'

dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0.4/build.gradle

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,6 @@ dependencies {
2626
testImplementation testFixtures(project(":dd-java-agent:instrumentation:jetty:jetty-server:jetty-server-9.0"))
2727
testImplementation testFixtures(project(':dd-java-agent:instrumentation:servlet:javax-servlet:javax-servlet-3.0'))
2828

29-
constraints {
30-
// Don't want to conflict with jetty from the test server.
31-
testImplementation('org.eclipse.jetty:jetty-server') {
32-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
33-
version {
34-
strictly '9.0.4.v20130625'
35-
}
36-
}
37-
testImplementation('org.eclipse.jetty:jetty-servlet') {
38-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
39-
version {
40-
strictly '9.0.4.v20130625'
41-
}
42-
}
43-
}
44-
4529
// Include all jetty-server instrumentation modules for testing. Only the version-compatible module will apply at runtime.
4630
testRuntimeOnly project(":dd-java-agent:instrumentation:jetty:jetty-server:jetty-server-9.0")
4731
testRuntimeOnly project(':dd-java-agent:instrumentation:servlet:javax-servlet:javax-servlet-2.2')

dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/build.gradle

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,6 @@ dependencies {
4343
testImplementation testFixtures(project(':dd-java-agent:instrumentation:servlet:javax-servlet:javax-servlet-3.0'))
4444
testFixturesImplementation testFixtures(project(':dd-java-agent:instrumentation:servlet:javax-servlet:javax-servlet-3.0'))
4545
testImplementation project(':dd-java-agent:appsec:appsec-test-fixtures')
46-
constraints {
47-
// Don't want to conflict with jetty from the test server.
48-
testImplementation('org.eclipse.jetty:jetty-server') {
49-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
50-
version {
51-
strictly jetty9Version
52-
}
53-
}
54-
testImplementation('org.eclipse.jetty:jetty-servlet') {
55-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
56-
version {
57-
strictly jetty9Version
58-
}
59-
}
60-
}
6146

6247
testFixturesCompileOnly(libs.bundles.groovy)
6348
}

dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/build.gradle

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,6 @@ dependencies {
6262
testImplementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-core', version: '8.0.41'
6363
testImplementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '8.0.41'
6464

65-
constraints {
66-
testImplementation('org.eclipse.jetty:jetty-server') {
67-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
68-
version {
69-
strictly '8.2.0.v20160908'
70-
}
71-
}
72-
testImplementation('org.eclipse.jetty:jetty-servlet') {
73-
because(":dd-java-agent:testing comes with a newer version that may cause conflicts")
74-
version {
75-
strictly '8.2.0.v20160908'
76-
}
77-
}
78-
}
79-
8065
// Jetty 10 seems to refuse to run on java8.
8166
// TODO: we need to setup separate test for Jetty 10 when that is released.
8267
latestDepTestImplementation group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.+'

dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-common/build.gradle

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,3 @@ dependencies {
2727
testImplementation project(':dd-java-agent:instrumentation:jetty:jetty-util-9.4.31')
2828
}
2929

30-
configurations.named('testImplementation') {
31-
// Don't want to conflict with jetty from the test server.
32-
// because :dd-java-agent:testing brings its own version of jetty-server
33-
exclude(group: 'org.eclipse.jetty')
34-
}
35-

dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,6 @@ tasks.withType(Test).configureEach {
143143
)
144144
}
145145

146-
configurations.named('testImplementation') {
147-
// Don't want to conflict with jetty from the test server.
148-
// because :dd-java-agent:testing brings its own version of jetty-server
149-
exclude(group: 'org.eclipse.jetty')
150-
}
151-
152146
// Exclude all the dependencies from test for latestDepTest since the names are completely different.
153147
["latestDepTestImplementation", "tomcat9TestImplementation", "latest10TestImplementation"].each {
154148
configurations.named(it) {

dd-java-agent/testing/build.gradle

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ dependencies {
3838
api libs.bundles.test.logging
3939
api libs.guava
4040

41-
api group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.4.56.v20240826'
41+
// Jetty is bundled (relocated) in the shadow jar, not exposed as transitive dependency
42+
// This avoids version conflicts with instrumentation tests that use different jetty versions
43+
compileOnly group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.4.56.v20240826'
44+
runtimeOnly group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.4.56.v20240826'
4245
// ^ 9.4 last to support java 8
4346
api group: 'com.squareup.okhttp3', name: 'logging-interceptor', version: libs.versions.okhttp.legacy.get()
4447

@@ -55,12 +58,34 @@ dependencies {
5558
}
5659

5760
tasks.named("shadowJar", ShadowJar) {
61+
// Only bundle jetty dependencies into the jar (relocated)
62+
// All other dependencies remain as transitive dependencies
5863
dependencies {
5964
include(dependency {
6065
it.moduleGroup == 'org.eclipse.jetty'
6166
})
6267
}
68+
69+
// Relocate jetty classes to avoid conflicts with instrumented versions
6370
relocate "org.eclipse.jetty", "datadog.eclipse.jetty"
71+
72+
// Make shadowJar replace the main jar in api configuration
73+
archiveClassifier = ''
74+
}
75+
76+
// Remove the regular jar from api elements and use shadow jar instead
77+
// Also exclude jetty from being exposed as a transitive dependency (it's bundled in the shadow jar)
78+
configurations {
79+
apiElements {
80+
outgoing.artifacts.clear()
81+
outgoing.artifact(tasks.shadowJar)
82+
exclude group: 'org.eclipse.jetty'
83+
}
84+
runtimeElements {
85+
outgoing.artifacts.clear()
86+
outgoing.artifact(tasks.shadowJar)
87+
exclude group: 'org.eclipse.jetty'
88+
}
6489
}
6590

6691
tasks.withType(Test).configureEach {

0 commit comments

Comments
 (0)