diff --git a/dd-java-agent/agent-tooling/src/main/resources/datadog/trace/agent/tooling/bytebuddy/matcher/ignored_class_name.trie b/dd-java-agent/agent-tooling/src/main/resources/datadog/trace/agent/tooling/bytebuddy/matcher/ignored_class_name.trie index a999241b83e..ea981c60a13 100644 --- a/dd-java-agent/agent-tooling/src/main/resources/datadog/trace/agent/tooling/bytebuddy/matcher/ignored_class_name.trie +++ b/dd-java-agent/agent-tooling/src/main/resources/datadog/trace/agent/tooling/bytebuddy/matcher/ignored_class_name.trie @@ -272,6 +272,7 @@ 0 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext 0 org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer$* 0 org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedWebappClassLoader +0 org.springframework.boot.devtools.restart.classloader.RestartClassLoader 0 org.springframework.boot.web.embedded.netty.NettyWebServer$* 0 org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader 0 org.springframework.boot.web.embedded.tomcat.TomcatWebServer$1 diff --git a/dd-java-agent/instrumentation/spring-boot/build.gradle b/dd-java-agent/instrumentation/spring-boot/build.gradle index b6665d2e314..e118b24ccaa 100644 --- a/dd-java-agent/instrumentation/spring-boot/build.gradle +++ b/dd-java-agent/instrumentation/spring-boot/build.gradle @@ -10,12 +10,23 @@ muzzle { module = 'spring-boot' versions = "[1.3.0.RELEASE,3)" } + pass { + group = 'org.springframework.boot' + module = 'spring-boot-devtools' + versions = "[1.3.0.RELEASE,3)" + } pass { group = 'org.springframework.boot' module = 'spring-boot' versions = "[3,)" javaVersion = "17" } + pass { + group = 'org.springframework.boot' + module = 'spring-boot-devtools' + versions = "[3,)" + javaVersion = "17" + } } apply from: "$rootDir/gradle/java.gradle" @@ -39,16 +50,24 @@ dependencies { implementation project(':dd-java-agent:instrumentation:span-origin') compileOnly group: 'org.springframework.boot', name: 'spring-boot', version: '1.3.0.RELEASE' + compileOnly group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '1.3.0.RELEASE' testImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '1.3.0.RELEASE' + testImplementation group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '1.3.0.RELEASE' + testImplementation project(':dd-java-agent:instrumentation:trace-annotation') boot1LatestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '1.+' + boot1LatestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '1.+' boot1LatestDepForkedTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '1.+' boot2TestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '2.0.0.RELEASE' + boot2TestImplementation group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.0.0.RELEASE' boot2ForkedTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '2.0.0.RELEASE' - boot2LatestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '1.+' - boot2LatestDepForkedTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '1.+' + boot2LatestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '2.+' + boot2LatestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.+' + boot2LatestDepForkedTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '2.+' boot3TestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '3.0.0' + boot3TestImplementation group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '3.0.0' boot3ForkedTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '3.0.0' latestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '+' + latestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '+' latestDepForkedTestImplementation group: 'org.springframework.boot', name: 'spring-boot', version: '+' latestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-logging', version: '+' latestDepForkedTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-logging', version: '+' diff --git a/dd-java-agent/instrumentation/spring-boot/gradle.lockfile b/dd-java-agent/instrumentation/spring-boot/gradle.lockfile index 6650c6c41ea..59d893411f7 100644 --- a/dd-java-agent/instrumentation/spring-boot/gradle.lockfile +++ b/dd-java-agent/instrumentation/spring-boot/gradle.lockfile @@ -14,7 +14,7 @@ com.datadoghq.okhttp3:okhttp:3.12.15=boot1LatestDepForkedTestCompileClasspath,bo com.datadoghq.okio:okio:1.17.6=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq:dd-javac-plugin-client:0.1.7=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq:java-dogstatsd-client:4.4.0=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath -com.datadoghq:sketches-java:0.8.2=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath +com.datadoghq:sketches-java:0.8.3=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath com.github.javaparser:javaparser-core:3.25.1=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.jnr:jffi:1.3.13=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath com.github.jnr:jnr-a64asm:1.0.0=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath @@ -48,19 +48,19 @@ com.thoughtworks.qdox:qdox:1.12.1=boot1LatestDepForkedTestRuntimeClasspath,boot1 commons-codec:commons-codec:1.15=spotbugs commons-fileupload:commons-fileupload:1.5=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath commons-io:commons-io:2.11.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -commons-logging:commons-logging:1.2=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,compileClasspath,testCompileClasspath,testRuntimeClasspath +commons-logging:commons-logging:1.2=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,compileClasspath,testCompileClasspath,testRuntimeClasspath de.thetaphi:forbiddenapis:3.1=compileClasspath info.picocli:picocli:4.6.3=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -io.micrometer:micrometer-commons:1.12.6=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.micrometer:micrometer-observation:1.12.6=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micrometer:micrometer-commons:1.12.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micrometer:micrometer-observation:1.12.7=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:10.0.0=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:1.2.0=spotbugs jline:jline:2.14.6=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath junit:junit-dep:4.11=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath junit:junit:4.13.2=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -net.bytebuddy:byte-buddy-agent:1.14.13=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -net.bytebuddy:byte-buddy:1.14.13=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy-agent:1.14.16=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +net.bytebuddy:byte-buddy:1.14.16=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,compileClasspath,instrumentPluginClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath net.java.dev.jna:jna-platform:5.8.0=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath net.java.dev.jna:jna:5.8.0=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath net.jcip:jcip-annotations:1.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,spotbugs,testCompileClasspath,testRuntimeClasspath @@ -125,14 +125,16 @@ org.hamcrest:hamcrest:2.2=boot1LatestDepForkedTestCompileClasspath,boot1LatestDe org.jctools:jctools-core:3.3.0=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.9.2=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.9.2=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -org.junit.platform:junit-platform-commons:1.9.2=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.junit.platform:junit-platform-engine:1.9.2=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.9.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepTestCompileClasspath,boot2ForkedTestCompileClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepTestCompileClasspath,boot2TestCompileClasspath,boot3ForkedTestCompileClasspath,boot3TestCompileClasspath,latestDepForkedTestCompileClasspath,latestDepTestCompileClasspath,testCompileClasspath +org.junit.platform:junit-platform-commons:1.9.2=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.9.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepTestCompileClasspath,boot2ForkedTestCompileClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepTestCompileClasspath,boot2TestCompileClasspath,boot3ForkedTestCompileClasspath,boot3TestCompileClasspath,latestDepForkedTestCompileClasspath,latestDepTestCompileClasspath,testCompileClasspath +org.junit.platform:junit-platform-engine:1.9.2=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.9.2=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -org.junit.platform:junit-platform-runner:1.9.2=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -org.junit.platform:junit-platform-suite-api:1.9.2=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath -org.junit.platform:junit-platform-suite-commons:1.9.2=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-runner:1.9.0=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-suite-api:1.9.0=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-suite-commons:1.9.0=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath +org.junit:junit-bom:5.9.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit:junit-bom:5.9.1=spotbugs -org.junit:junit-bom:5.9.2=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.objenesis:objenesis:3.3=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.opentest4j:opentest4j:1.2.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.ow2.asm:asm-analysis:9.2=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath @@ -156,40 +158,59 @@ org.slf4j:slf4j-api:2.0.13=latestDepForkedTestCompileClasspath,latestDepForkedTe org.slf4j:slf4j-simple:2.0.0=spotbugsSlf4j org.spockframework:spock-core:2.2-groovy-3.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.spockframework:spock-junit4:2.2-groovy-3.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework.boot:spring-boot-starter-logging:3.3.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework.boot:spring-boot-autoconfigure:1.3.0.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath +org.springframework.boot:spring-boot-autoconfigure:1.5.22.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath +org.springframework.boot:spring-boot-autoconfigure:2.0.0.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath +org.springframework.boot:spring-boot-autoconfigure:2.7.18=boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath +org.springframework.boot:spring-boot-autoconfigure:3.0.0=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath +org.springframework.boot:spring-boot-autoconfigure:3.3.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework.boot:spring-boot-devtools:1.3.0.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath +org.springframework.boot:spring-boot-devtools:1.5.22.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath +org.springframework.boot:spring-boot-devtools:2.0.0.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath +org.springframework.boot:spring-boot-devtools:2.7.18=boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath +org.springframework.boot:spring-boot-devtools:3.0.0=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath +org.springframework.boot:spring-boot-devtools:3.3.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework.boot:spring-boot-starter-logging:3.3.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework.boot:spring-boot:1.3.0.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework.boot:spring-boot:1.5.22.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath +org.springframework.boot:spring-boot:1.5.22.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath org.springframework.boot:spring-boot:2.0.0.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath +org.springframework.boot:spring-boot:2.7.18=boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework.boot:spring-boot:3.0.0=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework.boot:spring-boot:3.3.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework.boot:spring-boot:3.3.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-aop:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-aop:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath +org.springframework:spring-aop:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath org.springframework:spring-aop:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath +org.springframework:spring-aop:5.3.31=boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-aop:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-aop:6.1.8=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-aop:6.1.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-beans:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-beans:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath +org.springframework:spring-beans:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath org.springframework:spring-beans:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath +org.springframework:spring-beans:5.3.31=boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-beans:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-beans:6.1.8=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-beans:6.1.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-context:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-context:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath +org.springframework:spring-context:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath org.springframework:spring-context:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath +org.springframework:spring-context:5.3.31=boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-context:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-context:6.1.8=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-context:6.1.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-core:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-core:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath +org.springframework:spring-core:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath org.springframework:spring-core:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath +org.springframework:spring-core:5.3.31=boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-core:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-core:6.1.8=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-core:6.1.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-expression:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-expression:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath +org.springframework:spring-expression:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath org.springframework:spring-expression:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath +org.springframework:spring-expression:5.3.31=boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-expression:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-expression:6.1.8=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-expression:6.1.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-jcl:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath +org.springframework:spring-jcl:5.3.31=boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-jcl:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-jcl:6.1.8=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-jcl:6.1.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.testng:testng:7.5=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath org.webjars:jquery:3.5.1=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:4.4.3=spotbugs diff --git a/dd-java-agent/instrumentation/spring-boot/src/main/java/datadog/trace/instrumentation/springboot/RestartClassLoaderInstrumentation.java b/dd-java-agent/instrumentation/spring-boot/src/main/java/datadog/trace/instrumentation/springboot/RestartClassLoaderInstrumentation.java new file mode 100644 index 00000000000..3cf6c793b65 --- /dev/null +++ b/dd-java-agent/instrumentation/spring-boot/src/main/java/datadog/trace/instrumentation/springboot/RestartClassLoaderInstrumentation.java @@ -0,0 +1,78 @@ +package datadog.trace.instrumentation.springboot; + +import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named; +import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType.RUNNABLE; +import static net.bytebuddy.matcher.ElementMatchers.isConstructor; +import static net.bytebuddy.matcher.ElementMatchers.isMethod; + +import com.google.auto.service.AutoService; +import datadog.trace.agent.tooling.ExcludeFilterProvider; +import datadog.trace.agent.tooling.Instrumenter; +import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.agent.tooling.bytebuddy.memoize.Memoizer; +import datadog.trace.api.InstrumenterConfig; +import datadog.trace.bootstrap.InstrumentationContext; +import datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import net.bytebuddy.asm.Advice; +import org.springframework.boot.devtools.restart.classloader.RestartClassLoader; + +@AutoService(InstrumenterModule.class) +public class RestartClassLoaderInstrumentation extends InstrumenterModule.Tracing + implements Instrumenter.ForSingleType, ExcludeFilterProvider { + + public RestartClassLoaderInstrumentation() { + super("spring-boot-devtools", "spring-boot"); + } + + @Override + public boolean isEnabled() { + return super.isEnabled() && InstrumenterConfig.get().isResolverMemoizingEnabled(); + } + + @Override + public Map contextStore() { + return Collections.singletonMap( + "org.springframework.boot.devtools.restart.classloader.RestartClassLoader", + "java.lang.Boolean"); + } + + @Override + public String instrumentedType() { + return "org.springframework.boot.devtools.restart.classloader.RestartClassLoader"; + } + + @Override + public void methodAdvice(MethodTransformer transformer) { + transformer.applyAdvice(isConstructor(), getClass().getName() + "$RecordNewClassloaderAdvice"); + transformer.applyAdvice( + isMethod().and(named("findClass")), getClass().getName() + "$ResetMemoizerAdvice"); + } + + @Override + public Map> excludedClasses() { + return Collections.singletonMap( + RUNNABLE, + Collections.singleton( + "org.springframework.boot.devtools.restart.Restarter$LeakSafeThread")); + } + + public static class RecordNewClassloaderAdvice { + @Advice.OnMethodExit(suppress = Throwable.class) + public static void after(@Advice.This RestartClassLoader self) { + InstrumentationContext.get(RestartClassLoader.class, Boolean.class).putIfAbsent(self, true); + } + } + + public static class ResetMemoizerAdvice { + @Advice.OnMethodEnter(suppress = Throwable.class) + public static void before(@Advice.This RestartClassLoader self) { + if (Boolean.TRUE.equals( + InstrumentationContext.get(RestartClassLoader.class, Boolean.class).remove(self))) { + Memoizer.resetState(); + } + } + } +} diff --git a/dd-java-agent/instrumentation/spring-boot/src/test/groovy/RestartClassLoaderTest.groovy b/dd-java-agent/instrumentation/spring-boot/src/test/groovy/RestartClassLoaderTest.groovy new file mode 100644 index 00000000000..48c81d39d13 --- /dev/null +++ b/dd-java-agent/instrumentation/spring-boot/src/test/groovy/RestartClassLoaderTest.groovy @@ -0,0 +1,56 @@ +import datadog.trace.agent.test.AgentTestRunner +import datadog.trace.agent.test.utils.TraceUtils +import org.apache.commons.io.IOUtils +import org.springframework.asm.ClassReader +import org.springframework.asm.ClassVisitor +import org.springframework.asm.ClassWriter +import org.springframework.asm.MethodVisitor +import org.springframework.asm.Opcodes +import org.springframework.boot.devtools.restart.classloader.ClassLoaderFile +import org.springframework.boot.devtools.restart.classloader.ClassLoaderFiles +import org.springframework.boot.devtools.restart.classloader.RestartClassLoader + +class RestartClassLoaderTest extends AgentTestRunner { + def 'should instrument reloaded classes'() { + given: + def repository = new ClassLoaderFiles() + def parent = new URLClassLoader(new URL[]{ + GroovyObject.class.getProtectionDomain().getCodeSource().getLocation() + }, (ClassLoader)null) + def cl = new RestartClassLoader(parent, + new URL[] { + TestBean.class.getProtectionDomain().getCodeSource().getLocation() + }, + repository) + when: + TestBean.test() + then: + assertTraces(0, {}) + when: + def content = IOUtils.toByteArray(new URL(TracingBean.class.getProtectionDomain().getCodeSource().getLocation().toString() + "TracingBean.class")) + // We need to inject a different bytecode (the one of TracingBean) by emulating it was in TestBean like if TestBean has been recompiled on the fly and swapped. + // One option is to kind of cheat is to quickly manipulate the TracingBean bytecode to have a type name change + ClassReader reader = new ClassReader(content) + ClassWriter writer = new ClassWriter(0) + ClassVisitor transformer = new ClassVisitor(Opcodes.ASM5, writer) { + @Override + void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + super.visit(version, access, "TestBean", signature, superName, interfaces) + } + + @Override + MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + return super.visitMethod(access, name, desc, signature, exceptions) + } + } + reader.accept( transformer, 0) + repository.addFile("TestBean.class", new ClassLoaderFile(ClassLoaderFile.Kind.MODIFIED, writer.toByteArray())) + cl.loadClass(TestBean.class.getName()).getMethod("test").invoke(null) + then: + assertTraces(1, { + trace(1) { + TraceUtils.basicSpan(it, "trace.annotation","TestBean.test",null, null, ["component":"trace"] ) + } + }) + } +} diff --git a/dd-java-agent/instrumentation/spring-boot/src/test/java/TestBean.java b/dd-java-agent/instrumentation/spring-boot/src/test/java/TestBean.java new file mode 100644 index 00000000000..c7537b06069 --- /dev/null +++ b/dd-java-agent/instrumentation/spring-boot/src/test/java/TestBean.java @@ -0,0 +1,4 @@ +public class TestBean { + + public static void test() {} +} diff --git a/dd-java-agent/instrumentation/spring-boot/src/test/java/TracingBean.java b/dd-java-agent/instrumentation/spring-boot/src/test/java/TracingBean.java new file mode 100644 index 00000000000..9342fa892bf --- /dev/null +++ b/dd-java-agent/instrumentation/spring-boot/src/test/java/TracingBean.java @@ -0,0 +1,6 @@ +import datadog.trace.api.Trace; + +public class TracingBean { + @Trace + public static void test() {} +}