diff --git a/buildSrc/src/main/kotlin/datadog.test-jvm-contraints.gradle.kts b/buildSrc/src/main/kotlin/datadog.test-jvm-contraints.gradle.kts new file mode 100644 index 00000000000..18a5ecfee60 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog.test-jvm-contraints.gradle.kts @@ -0,0 +1,127 @@ +import datadog.gradle.plugin.testJvmConstraints.ProvideJvmArgsOnJvmLauncherVersion +import datadog.gradle.plugin.testJvmConstraints.TestJvmConstraintsExtension +import datadog.gradle.plugin.testJvmConstraints.TestJvmSpec +import datadog.gradle.plugin.testJvmConstraints.isJavaVersionAllowed +import datadog.gradle.plugin.testJvmConstraints.isTestJvmAllowed + +plugins { + java +} + +val projectExtension = extensions.create(TestJvmConstraintsExtension.NAME) + +val testJvmSpec = TestJvmSpec(project) + +tasks.withType().configureEach { + if (extensions.findByName(TestJvmConstraintsExtension.NAME) != null) { + return@configureEach + } + + inputs.property("testJvm", testJvmSpec.testJvmProperty).optional(true) + + val taskExtension = project.objects.newInstance().also { + configureConventions(it, projectExtension) + } + + inputs.property("${TestJvmConstraintsExtension.NAME}.allowReflectiveAccessToJdk", taskExtension.allowReflectiveAccessToJdk).optional(true) + inputs.property("${TestJvmConstraintsExtension.NAME}.excludeJdk", taskExtension.excludeJdk) + inputs.property("${TestJvmConstraintsExtension.NAME}.includeJdk", taskExtension.includeJdk) + inputs.property("${TestJvmConstraintsExtension.NAME}.forceJdk", taskExtension.forceJdk) + inputs.property("${TestJvmConstraintsExtension.NAME}.minJavaVersion", taskExtension.minJavaVersion).optional(true) + inputs.property("${TestJvmConstraintsExtension.NAME}.maxJavaVersion", taskExtension.maxJavaVersion).optional(true) + + extensions.add(TestJvmConstraintsExtension.NAME, taskExtension) + + configureTestJvm(taskExtension) +} + +/** + * Provide arguments if condition is met. + */ +fun Test.conditionalJvmArgs( + applyFromVersion: JavaVersion, + jvmArgsToApply: List, + additionalCondition: Provider = project.providers.provider { true } +) { + jvmArgumentProviders.add( + ProvideJvmArgsOnJvmLauncherVersion( + this, + applyFromVersion, + jvmArgsToApply, + additionalCondition + ) + ) +} + +/** + * Configure the jvm launcher of the test task and ensure the test task + * can be run with the test task launcher. + */ +private fun Test.configureTestJvm(extension: TestJvmConstraintsExtension) { + if (testJvmSpec.javaTestLauncher.isPresent) { + javaLauncher = testJvmSpec.javaTestLauncher + onlyIf("Allowed or forced JDK") { + extension.isTestJvmAllowed(testJvmSpec) + } + } else { + onlyIf("Is current Daemon JVM allowed") { + extension.isJavaVersionAllowed(JavaVersion.current()) + } + } + + // temporary workaround when using Java16+: some tests require reflective access to java.lang/java.util + conditionalJvmArgs( + JavaVersion.VERSION_16, + listOf( + "--add-opens=java.base/java.lang=ALL-UNNAMED", + "--add-opens=java.base/java.util=ALL-UNNAMED" + ), + extension.allowReflectiveAccessToJdk + ) +} + +// Jacoco plugin is not applied on every project +pluginManager.withPlugin("org.gradle.jacoco") { + tasks.withType().configureEach { + // Disable jacoco for additional 'testJvm' tests to speed things up a bit + if (testJvmSpec.javaTestLauncher.isPresent) { + extensions.configure { + isEnabled = false + } + } + } +} + +/** + * Configures the convention, this tells Gradle where to look for values. + * + * Currently, the extension is still configured to look at project's _extra_ properties. + */ +private fun Test.configureConventions( + taskExtension: TestJvmConstraintsExtension, + projectExtension: TestJvmConstraintsExtension +) { + taskExtension.minJavaVersion.convention(projectExtension.minJavaVersion + .orElse(providers.provider { project.findProperty("${name}MinJavaVersionForTests") as? JavaVersion }) + .orElse(providers.provider { project.findProperty("minJavaVersion") as? JavaVersion }) + ) + taskExtension.maxJavaVersion.convention(projectExtension.maxJavaVersion + .orElse(providers.provider { project.findProperty("${name}MaxJavaVersionForTests") as? JavaVersion }) + .orElse(providers.provider { project.findProperty("maxJavaVersion") as? JavaVersion }) + ) + taskExtension.forceJdk.convention(projectExtension.forceJdk + .orElse(providers.provider { + @Suppress("UNCHECKED_CAST") + project.findProperty("forceJdk") as? List ?: emptyList() + }) + ) + taskExtension.excludeJdk.convention(projectExtension.excludeJdk + .orElse(providers.provider { + @Suppress("UNCHECKED_CAST") + project.findProperty("excludeJdk") as? List ?: emptyList() + }) + ) + taskExtension.allowReflectiveAccessToJdk.convention(projectExtension.allowReflectiveAccessToJdk + .orElse(providers.provider { project.findProperty("allowReflectiveAccessToJdk") as? Boolean }) + ) +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/ProvideJvmArgsOnJvmLauncherVersion.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/ProvideJvmArgsOnJvmLauncherVersion.kt new file mode 100644 index 00000000000..52443474337 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/ProvideJvmArgsOnJvmLauncherVersion.kt @@ -0,0 +1,38 @@ +package datadog.gradle.plugin.testJvmConstraints + +import org.gradle.api.JavaVersion +import org.gradle.api.provider.Provider +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.testing.Test +import org.gradle.process.CommandLineArgumentProvider + +class ProvideJvmArgsOnJvmLauncherVersion( + @get:Internal + val test: Test, + + @get:Input + val applyFromVersion: JavaVersion, + + @get:Input + val jvmArgsToApply: List, + + @get:Input + @get:Optional + val additionalCondition: Provider +) : CommandLineArgumentProvider { + + override fun asArguments(): Iterable { + val launcherVersion = test.javaLauncher + .map { JavaVersion.toVersion(it.metadata.languageVersion.asInt()) } + .orElse(JavaVersion.current()) + .get() + + return if (launcherVersion.isCompatibleWith(applyFromVersion) && additionalCondition.getOrElse(true)) { + jvmArgsToApply + } else { + emptyList() + } + } +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsExtension.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsExtension.kt new file mode 100644 index 00000000000..9631822c623 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsExtension.kt @@ -0,0 +1,42 @@ +package datadog.gradle.plugin.testJvmConstraints + +import org.gradle.api.JavaVersion +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property + +interface TestJvmConstraintsExtension { + /** + * Sets an explicit minimum bound to allowed JDK version + */ + val minJavaVersion: Property + + /** + * Sets an explicit maximum bound to allowed JDK version + */ + val maxJavaVersion: Property + + /** + * List of allowed JDK names (passed through the `testJvm` property). + */ + val forceJdk: ListProperty + + /** + * List of included JDK names (passed through the `testJvm` property). + */ + val includeJdk: ListProperty + + /** + * List of excluded JDK names (passed through the `testJvm` property). + */ + val excludeJdk: ListProperty + + /** + * Indicate if test jvm allows reflective access to JDK modules, in particular this toggle + * openning `java.base/java.lang` and `java.base/java.util`. + */ + val allowReflectiveAccessToJdk: Property + + companion object { + const val NAME = "testJvmConstraint" + } +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt new file mode 100644 index 00000000000..6ab8c806715 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt @@ -0,0 +1,48 @@ +package datadog.gradle.plugin.testJvmConstraints + +import org.gradle.api.JavaVersion +import org.gradle.api.logging.Logging + +private val logger = Logging.getLogger("TestJvmConstraintsUtils") + +internal fun TestJvmConstraintsExtension.isJavaVersionAllowed(version: JavaVersion): Boolean { + return isWithinAllowedRange(version) +} + +internal fun TestJvmConstraintsExtension.isTestJvmAllowed(testJvmSpec: TestJvmSpec): Boolean { + val testJvmName = testJvmSpec.normalizedTestJvm.get() + + val included = includeJdk.get() + if (included.isNotEmpty() && included.none { it.equals(testJvmName, ignoreCase = true) }) { + return false + } + + val excluded = excludeJdk.get() + if (excluded.isNotEmpty() && excluded.any { it.equals(testJvmName, ignoreCase = true) }) { + return false + } + + val launcherVersion = JavaVersion.toVersion(testJvmSpec.javaTestLauncher.get().metadata.languageVersion.asInt()) + if (!isWithinAllowedRange(launcherVersion) && forceJdk.get().none { it.equals(testJvmName, ignoreCase = true) }) { + return false + } + + return true +} + +private fun TestJvmConstraintsExtension.isWithinAllowedRange(currentJvmVersion: JavaVersion): Boolean { + val definedMin = minJavaVersion.isPresent + val definedMax = maxJavaVersion.isPresent + + if (definedMin && (minJavaVersion.get()) > currentJvmVersion) { + logger.info("isWithinAllowedRange returns false b/o minProp=${minJavaVersion.get()} is defined and greater than version=$currentJvmVersion") + return false + } + + if (definedMax && (maxJavaVersion.get()) < currentJvmVersion) { + logger.info("isWithinAllowedRange returns false b/o maxProp=${maxJavaVersion.get()} is defined and lower than version=$currentJvmVersion") + return false + } + + return true +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt new file mode 100644 index 00000000000..d78e96e68f0 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt @@ -0,0 +1,88 @@ +package datadog.gradle.plugin.testJvmConstraints + +import org.gradle.kotlin.dsl.support.serviceOf +import org.gradle.api.GradleException +import org.gradle.api.Project +import org.gradle.jvm.toolchain.JavaLauncher +import org.gradle.jvm.toolchain.JavaToolchainService +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths + + +class TestJvmSpec(val project: Project) { + companion object { + const val TEST_JVM = "testJvm" + } + + private val currentJavaHomePath = project.providers.systemProperty("java.home").map { it.normalizeToJDKJavaHome() } + + val testJvmProperty = project.providers.gradleProperty(TEST_JVM) + + val normalizedTestJvm = testJvmProperty.map { testJvm -> + if (testJvm.isBlank()) { + throw GradleException("testJvm property is blank") + } + + // "stable" is calculated as the largest X found in JAVA_X_HOME + if (testJvm == "stable") { + val javaVersions = project.providers.environmentVariablesPrefixedBy("JAVA_").map { javaHomes -> + javaHomes + .filter { it.key.matches(Regex("^JAVA_[0-9]+_HOME$")) } + .map { Regex("^JAVA_(\\d+)_HOME$").find(it.key)!!.groupValues[1].toInt() } + }.get() + + if (javaVersions.isEmpty()) { + throw GradleException("No valid JAVA_X_HOME environment variables found.") + } + + javaVersions.max().toString() + } else { + testJvm + } + }.map { project.logger.info("normalized testJvm: $it"); it } + + val testJvmHomePath = normalizedTestJvm.map { + if (Files.exists(Paths.get(it))) { + it.normalizeToJDKJavaHome() + } else { + val matcher = Regex("([a-zA-Z]*)([0-9]+)").find(it) + if (matcher == null) { + throw GradleException("Unable to find launcher for Java '$it'. It needs to match '([a-zA-Z]*)([0-9]+)'.") + } + val testJvmEnv = "JAVA_${it}_HOME" + val testJvmHome = project.providers.environmentVariable(testJvmEnv).orNull + if (testJvmHome == null) { + throw GradleException("Unable to find launcher for Java '$it'. Have you set '$testJvmEnv'?") + } + + testJvmHome.normalizeToJDKJavaHome() + } + }.map { project.logger.info("testJvm home path: $it"); it } + + val javaTestLauncher = project.providers.zip(testJvmHomePath, normalizedTestJvm) { testJvmHome, testJvm -> + // Only change test JVM if it's not the one we are running the gradle build with + if (currentJavaHomePath.get() == testJvmHome) { + project.providers.provider { null } + } else { + // This is using internal APIs + val jvmSpec = org.gradle.jvm.toolchain.internal.SpecificInstallationToolchainSpec( + project.serviceOf(), + project.file(testJvmHome) + ) + + // The provider always says that a value is present so we need to wrap it for proper error messages + project.javaToolchains.launcherFor(jvmSpec).orElse(project.providers.provider { + throw GradleException("Unable to find launcher for Java $testJvm. Does '$testJvmHome' point to a JDK?") + }) + } + }.flatMap { it }.map { project.logger.info("testJvm launcher: ${it.executablePath}"); it } + + private fun String.normalizeToJDKJavaHome(): Path { + val javaHome = project.file(this).toPath().toRealPath() + return if (javaHome.endsWith("jre")) javaHome.parent else javaHome + } + + private val Project.javaToolchains: JavaToolchainService get() = + extensions.getByName("javaToolchains") as JavaToolchainService +} diff --git a/dd-java-agent/agent-bootstrap/build.gradle b/dd-java-agent/agent-bootstrap/build.gradle index 1ee2d9a6cde..f330a99f517 100644 --- a/dd-java-agent/agent-bootstrap/build.gradle +++ b/dd-java-agent/agent-bootstrap/build.gradle @@ -70,7 +70,7 @@ jmh { } tasks.withType(Test).configureEach { - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_16, ['--add-opens', 'java.base/java.net=ALL-UNNAMED'] // for HostNameResolverForkedTest diff --git a/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle index 2fb6e24f654..73daac9e1a0 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle @@ -1,15 +1,19 @@ -// Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - // By default tests with be compiled for `minJavaVersionForTests` version, - // but in this case we would like to avoid this since we would like to run with ZULU8 - skipSettingTestJavaVersion = true - excludeJdk = ['SEMERU11', 'SEMERU17'] -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) { + // By default tests with be compiled for `minJavaVersion` version, + // but in this case we would like to avoid this since we would like to run with ZULU8 + applyForTestSources = false + } +} + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + excludeJdk = ['SEMERU11', 'SEMERU17'] +} + minimumBranchCoverage = 0.5 minimumInstructionCoverage = 0.7 diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle index d581337fabc..53db41222eb 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle @@ -1,17 +1,16 @@ import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" +apply plugin: 'idea' + +testJvmConstraint { // the tests need Java 11 because the JFR writer got compiled with a version // of ByteBuffer.position(int) which is binary incompatible with Java 8 ¯\_(ツ)_/¯ - minJavaVersionForTests = JavaVersion.VERSION_11 + minJavaVersion = JavaVersion.VERSION_11 excludeJdk = ['SEMERU11', 'SEMERU17'] } -apply from: "$rootDir/gradle/java.gradle" -apply plugin: 'idea' - dependencies { api project(':dd-java-agent:agent-profiling:profiling-controller') diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle index d4714a298d7..66709882492 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle @@ -1,13 +1,12 @@ import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis // Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_1_8 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_1_8 +} sourceSets { "main_java11" { @@ -56,7 +55,7 @@ idea { } tasks.withType(Test).configureEach { - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_1_9, [ diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle index 6c2f5beb1fa..949fad86c06 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle @@ -1,17 +1,21 @@ -// Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" +apply plugin: 'idea' + +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) { + // By default tests with be compiled for `minJavaVersion` version, + // but in this case we would like to avoid this since we would like to run with ZULU8 + applyForTestSources = false + } +} + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 // Zulu has backported profiling support forceJdk = ['ZULU8'] excludeJdk = ['SEMERU11', 'SEMERU17'] - // By default tests with be compiled for `minJavaVersionForTests` version, - // but in this case we would like to avoid this since we would like to run with ZULU8 - skipSettingTestJavaVersion = true } -apply from: "$rootDir/gradle/java.gradle" -apply plugin: 'idea' - dependencies { api libs.slf4j api project(':internal-api') diff --git a/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle index 5302bc76cec..750ef5341ba 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle @@ -1,14 +1,13 @@ -// Set properties before any plugins get loaded -ext { - // Need to force Oracle JDK 8 since it is the only JDK compatible with this implementation - forceJdk = ['ORACLE8'] - // By default tests with be compiled for `minJavaVersionForTests` version, - // but in this case we would like to avoid this since we would like to run with ORACLE8 - skipSettingTestJavaVersion = true -} - apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) { + // By default tests with be compiled for `minJavaVersion` version, + // but in this case we would like to avoid this since we would like to run with ZULU8 + applyForTestSources = false + } +} + minimumBranchCoverage = 0.5 minimumInstructionCoverage = 0.7 @@ -28,8 +27,8 @@ dependencies { // Oracle JDK requires extra JVM arguments to enable JFR tasks.withType(Test).configureEach { - onlyIf { - it.name.contains('ORACLE8') + testJvmConstraint { + includeJdk = ['ORACLE8'] } jvmArgs += [ diff --git a/dd-java-agent/instrumentation/aerospike-4.0/build.gradle b/dd-java-agent/instrumentation/aerospike-4.0/build.gradle index 92d6ed2b6db..c3c5ce7b03c 100644 --- a/dd-java-agent/instrumentation/aerospike-4.0/build.gradle +++ b/dd-java-agent/instrumentation/aerospike-4.0/build.gradle @@ -1,7 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_21 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_21 -} muzzle { pass { group = 'com.aerospike' @@ -18,6 +14,18 @@ addTestSuiteForDir("latest7DepTest", "test") addTestSuiteExtendingForDir("latestDepForkedTest", "latestDepTest", "test") addTestSuiteExtendingForDir("latest7DepForkedTest", "latest7DepTest", "test") +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_21 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_21 + } +} + dependencies { compileOnly group: 'com.aerospike', name: 'aerospike-client', version: '4.0.0' diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle index e06f03e1f54..3aea0ce4073 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle @@ -1,8 +1,3 @@ -// Set properties before any plugins get loaded -ext { - lagomTestMaxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' apply plugin: 'call-site-instrumentation' @@ -22,6 +17,12 @@ addTestSuiteForDir 'version101IastTest', 'iastTest' addTestSuiteForDir 'version102IastTest', 'iastTest' addTestSuiteForDir 'latestDepIastTest', 'iastTest' +tasks.named("lagomTest", Test) { + testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_1_8 + } +} + tasks.named("compileLagomTestJava", JavaCompile) { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle index ffbc70668d3..26b9de5c894 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + muzzle { pass { group = 'com.typesafe.akka' @@ -22,7 +21,6 @@ muzzle { assertInverse = true } - } repositories { diff --git a/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle b/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle index 07e1be55c5c..16ce7f9bd2f 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle +++ b/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle @@ -1,7 +1,3 @@ -ext { - jetty11TestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { group = "com.linecorp.armeria" @@ -25,6 +21,12 @@ addTestSuiteForDir("jetty11Test", "test/jetty11") addTestSuiteExtendingForDir("jetty9LatestDepTest", "latestDepTest", "test/jetty9") addTestSuiteExtendingForDir("jetty11LatestDepTest", "latestDepTest", "test/jetty11") +tasks.named("jetty11Test", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + configureGroovyCompiler(11, "compileJetty11TestGroovy", "compileJetty11LatestDepTestGroovy") ["jetty11Test", "jetty11LatestDepTest"].each { name -> diff --git a/dd-java-agent/instrumentation/avro/build.gradle b/dd-java-agent/instrumentation/avro/build.gradle index e32b22e1416..36ade375e20 100644 --- a/dd-java-agent/instrumentation/avro/build.gradle +++ b/dd-java-agent/instrumentation/avro/build.gradle @@ -1,6 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = 'org.apache.avro' @@ -14,6 +11,13 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest','test') addTestSuiteForDir('latestDepTest8','test') + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + dependencies { compileOnly group: 'org.apache.avro', name: 'avro', version: '1.11.3' testImplementation group: 'org.apache.avro', name: 'avro', version: '1.11.3' diff --git a/dd-java-agent/instrumentation/axis2-1.3/build.gradle b/dd-java-agent/instrumentation/axis2-1.3/build.gradle index ec5142724fa..585dec45da3 100644 --- a/dd-java-agent/instrumentation/axis2-1.3/build.gradle +++ b/dd-java-agent/instrumentation/axis2-1.3/build.gradle @@ -1,7 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = "org.apache.axis2" @@ -14,6 +10,19 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('latestDepForkedTest', 'test') + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + configurations.configureEach { // the version used by axis2 isn't available in a public repository - we don't need it, so exclude it exclude group: 'org.apache.woden', module: 'woden' diff --git a/dd-java-agent/instrumentation/build.gradle b/dd-java-agent/instrumentation/build.gradle index 897b96c6ce1..5b8416ba4dd 100644 --- a/dd-java-agent/instrumentation/build.gradle +++ b/dd-java-agent/instrumentation/build.gradle @@ -33,12 +33,16 @@ subprojects { Project subProj -> if (!plugins.hasPlugin("java")) { return } - String jdkCompile = null - if (project.hasProperty('minJavaVersionForTests') && project.getProperty('minJavaVersionForTests') != JavaVersion.VERSION_1_8) { - def version = JavaVersion.toVersion(project.getProperty('minJavaVersionForTests')) - def name = "java$version.majorVersion" - jdkCompile = "main_${name}Implementation" - } + + // Configures base dependencies for additional sourceSet + configurations + .matching { it.name.matches("${SourceSet.MAIN_SOURCE_SET_NAME}_java\\d+${JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME.capitalize()}") } + .configureEach { + it.dependencies.add(project.dependencyFactory.create(project(':dd-trace-api'))) + it.dependencies.add(project.dependencyFactory.create(project(':dd-java-agent:agent-tooling'))) + it.dependencies.addLater(libs.bytebuddy) + } + configurations.named('muzzleBootstrap') { exclude group: 'org.snakeyaml', module: 'snakeyaml-engine' // we vendor this in the agent jar } @@ -47,11 +51,6 @@ subprojects { Project subProj -> implementation project(':dd-trace-api') implementation project(':dd-java-agent:agent-tooling') implementation libs.bytebuddy - if (jdkCompile) { - "$jdkCompile" project(':dd-trace-api') - "$jdkCompile" project(':dd-java-agent:agent-tooling') - "$jdkCompile" libs.bytebuddy - } annotationProcessor project(':dd-java-agent:instrumentation-annotation-processor') annotationProcessor libs.autoservice.processor diff --git a/dd-java-agent/instrumentation/classloading/jboss-testing/build.gradle b/dd-java-agent/instrumentation/classloading/jboss-testing/build.gradle index dfc50f96c15..6f66847312b 100644 --- a/dd-java-agent/instrumentation/classloading/jboss-testing/build.gradle +++ b/dd-java-agent/instrumentation/classloading/jboss-testing/build.gradle @@ -1,9 +1,10 @@ -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { // TODO Java 17: This version of jboss-modules doesn't support Java 17 // __redirected.__SAXParserFactory can't access com.sun.org.apache.xerces.internal.jaxp - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" dependencies { testImplementation project(':dd-java-agent:instrumentation:classloading') diff --git a/dd-java-agent/instrumentation/cxf-2.1/build.gradle b/dd-java-agent/instrumentation/cxf-2.1/build.gradle index eb44a71c5eb..ff0a56cc53e 100644 --- a/dd-java-agent/instrumentation/cxf-2.1/build.gradle +++ b/dd-java-agent/instrumentation/cxf-2.1/build.gradle @@ -1,7 +1,3 @@ -ext { - cxf3LatestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} muzzle { pass { group = "org.apache.cxf" @@ -23,6 +19,18 @@ apply from: "${rootDir}/gradle/java.gradle" addTestSuite('latestDepTest') addTestSuiteForDir('cxf3LatestDepTest', 'test') +tasks.named("cxf3LatestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} + tasks.named("compileCxf3LatestDepTestJava", JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_1_8) } diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/build.gradle b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/build.gradle index 13d79d20ed8..7eb0fa13a88 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/build.gradle +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/build.gradle @@ -1,13 +1,8 @@ -// Set properties before any plugins get loaded ext { - // Test use Cassandra 3 which requires Java 8. (Currently incompatible with Java 9.) - maxJavaVersionForTests = JavaVersion.VERSION_1_8 cassandraDriverTestVersions = "[3.0,4.0)" } - muzzle { - pass { group = "com.datastax.cassandra" module = "cassandra-driver-core" @@ -43,6 +38,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + // Test use Cassandra 3 which requires Java 8. (Currently incompatible with Java 9.) + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/build.gradle b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/build.gradle index fbdabff507c..f9e18660380 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/build.gradle +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/build.gradle @@ -1,13 +1,8 @@ -// Set properties before any plugins get loaded ext { - // Test use Cassandra 3 which requires Java 8. (Currently incompatible with Java 9.) - maxJavaVersionForTests = JavaVersion.VERSION_1_8 cassandraDriverTestVersions = "[3.8,4.0)" } - muzzle { - pass { group = "com.datastax.cassandra" module = "cassandra-driver-core" @@ -19,6 +14,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // Test use Cassandra 3 which requires Java 8. (Currently incompatible with Java 9.) + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/build.gradle b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/build.gradle index d4a2d50f0ec..84ecae902cf 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/build.gradle +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/build.gradle @@ -1,9 +1,3 @@ -ext { - // TODO Java 17: The embedded cassandra deadlocks on start every time on Java 17 - // This can be changed to use test-containers - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - muzzle { pass { group = "com.datastax.oss" @@ -15,6 +9,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // TODO Java 17: The embedded cassandra deadlocks on start every time on Java 17 + // This can be changed to use test-containers + maxJavaVersion = JavaVersion.VERSION_15 +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/elasticsearch/rest-5/build.gradle b/dd-java-agent/instrumentation/elasticsearch/rest-5/build.gradle index 3d9226f41f2..9f6a00ee876 100644 --- a/dd-java-agent/instrumentation/elasticsearch/rest-5/build.gradle +++ b/dd-java-agent/instrumentation/elasticsearch/rest-5/build.gradle @@ -1,10 +1,3 @@ -// Set properties before any plugins get loaded -ext { - // TODO Java 17: The embedded elastic search server doesn't work on Java 17 - // This can be changed to use test-containers - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - muzzle { pass { group = "org.elasticsearch.client" @@ -24,6 +17,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // TODO Java 17: The embedded elastic search server doesn't work on Java 17 + // This can be changed to use test-containers + maxJavaVersion = JavaVersion.VERSION_15 +} + addTestSuite('latestDepTest') dependencies { diff --git a/dd-java-agent/instrumentation/elasticsearch/transport-2/build.gradle b/dd-java-agent/instrumentation/elasticsearch/transport-2/build.gradle index 7d48361480d..4cdc2b6b638 100644 --- a/dd-java-agent/instrumentation/elasticsearch/transport-2/build.gradle +++ b/dd-java-agent/instrumentation/elasticsearch/transport-2/build.gradle @@ -1,8 +1,3 @@ -// Set properties before any plugins get loaded -ext { - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - muzzle { pass { group = "org.elasticsearch" @@ -15,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'latestDepTest') dependencies { diff --git a/dd-java-agent/instrumentation/elasticsearch/transport-5/build.gradle b/dd-java-agent/instrumentation/elasticsearch/transport-5/build.gradle index 46552c49777..5eee77b656d 100644 --- a/dd-java-agent/instrumentation/elasticsearch/transport-5/build.gradle +++ b/dd-java-agent/instrumentation/elasticsearch/transport-5/build.gradle @@ -1,10 +1,3 @@ -// Set properties before any plugins get loaded -ext { - // TODO Java 17: The embedded elastic search server doesn't work on Java 17 - // This can be changed to use test-containers - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - muzzle { pass { group = "org.elasticsearch.client" @@ -24,6 +17,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // TODO Java 17: The embedded elastic search server doesn't work on Java 17 + // This can be changed to use test-containers + maxJavaVersion = JavaVersion.VERSION_15 +} + dependencies { compileOnly group: 'org.elasticsearch.client', name: 'transport', version: '5.0.0' diff --git a/dd-java-agent/instrumentation/exception-profiling/build.gradle b/dd-java-agent/instrumentation/exception-profiling/build.gradle index 6f90365731c..7e77bed70e9 100644 --- a/dd-java-agent/instrumentation/exception-profiling/build.gradle +++ b/dd-java-agent/instrumentation/exception-profiling/build.gradle @@ -1,15 +1,20 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" +apply plugin: "idea" + +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) { + // By default tests with be compiled for `minJavaVersion` version, + // but in this case we would like to avoid this since we would like to run with ZULU8 + applyForTestSources = false + } +} + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 // Zulu has backported profiling support forceJdk = ['ZULU8'] - // By default tests with be compiled for `minJavaVersionForTests` version, - // but in this case we would like to avoid this since we would like to run with ZULU8 - skipSettingTestJavaVersion = true } -apply from: "$rootDir/gradle/java.gradle" -apply plugin: "idea" - dependencies { testImplementation 'de.thetaphi:forbiddenapis:3.8' testImplementation libs.bundles.junit5 diff --git a/dd-java-agent/instrumentation/glassfish-3.0/build.gradle b/dd-java-agent/instrumentation/glassfish-3.0/build.gradle index 59bb2785a5d..91b481b4d59 100644 --- a/dd-java-agent/instrumentation/glassfish-3.0/build.gradle +++ b/dd-java-agent/instrumentation/glassfish-3.0/build.gradle @@ -1,7 +1,3 @@ -ext { - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - muzzle { pass { group = 'org.glassfish.main.extras' @@ -14,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/graal/native-image/build.gradle b/dd-java-agent/instrumentation/graal/native-image/build.gradle index 8ec10a8b617..00b23d34d99 100644 --- a/dd-java-agent/instrumentation/graal/native-image/build.gradle +++ b/dd-java-agent/instrumentation/graal/native-image/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { group = "org.graalvm.nativeimage" @@ -13,6 +9,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + ["compileMain_java11Java", "compileTestJava"].each { tasks.named(it, JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_11, "Needs access to module jdk.internal.vm.ci") diff --git a/dd-java-agent/instrumentation/graphql-java/graphql-java-20.0/build.gradle b/dd-java-agent/instrumentation/graphql-java/graphql-java-20.0/build.gradle index 8cba6df1444..500808629ef 100644 --- a/dd-java-agent/instrumentation/graphql-java/graphql-java-20.0/build.gradle +++ b/dd-java-agent/instrumentation/graphql-java/graphql-java-20.0/build.gradle @@ -1,9 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 - graphql21LatestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - graphql21LatestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} // there are a lot of invalid version using dates (i.e. com.graphql-java-graphql-java-2018-06-04T04-23-07) // so we limit by chunks muzzle { @@ -67,3 +61,16 @@ dependencies { configureCompiler(it, 11) } } + +tasks.matching { + it.name in [ + "latestDepTest", + "latestDepForkedTest", + "graphql21LatestDepTest", + "graphql21LatestDepForkedTest" + ] +}.configureEach { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} diff --git a/dd-java-agent/instrumentation/ignite-2.0/build.gradle b/dd-java-agent/instrumentation/ignite-2.0/build.gradle index 69be7f06472..50ede890db1 100644 --- a/dd-java-agent/instrumentation/ignite-2.0/build.gradle +++ b/dd-java-agent/instrumentation/ignite-2.0/build.gradle @@ -1,12 +1,3 @@ -ext { - // See https://ignite.apache.org/docs/latest/quick-start/java#running-ignite-with-java-11-or-later - // FIXME: Because of this condition, tests only run in Java 8, and latestDepTest never run, as they require Java 11+. - maxJavaVersionForTests = JavaVersion.VERSION_1_8 - // ignite 2.17.0+ requires Java 11+ - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { group = 'org.apache.ignite' @@ -24,6 +15,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // See https://ignite.apache.org/docs/latest/quick-start/java#running-ignite-with-java-11-or-later + // FIXME: Because of this condition, tests only run in Java 8, and latestDepTest never run, as they require Java 11+. + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') // ignite 2.16.0 latest version compatible with Java 8 @@ -43,8 +40,17 @@ dependencies { latestDepTestImplementation group: 'org.apache.ignite', name: 'ignite-indexing', version: '2.+' } -for (task in ['compileLatestDepTestGroovy', 'compileLatestDepForkedTestGroovy']) { - tasks.named(task, GroovyCompile) { +for (taskName in ['compileLatestDepTestGroovy', 'compileLatestDepForkedTestGroovy']) { + tasks.named(taskName, GroovyCompile) { configureCompiler(it, 11) } } + +for (taskName in ['latestDepTest', 'latestDepForkedTest']) { + tasks.named(taskName, Test) { + testJvmConstraint { + // ignite 2.17.0+ requires Java 11+ + minJavaVersion = JavaVersion.VERSION_11 + } + } +} diff --git a/dd-java-agent/instrumentation/jakarta-jms/build.gradle b/dd-java-agent/instrumentation/jakarta-jms/build.gradle index a86e2f3750c..7bc7081cae4 100644 --- a/dd-java-agent/instrumentation/jakarta-jms/build.gradle +++ b/dd-java-agent/instrumentation/jakarta-jms/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { name = "jakarta.jms" @@ -14,6 +10,11 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + apply from: "$rootDir/gradle/configure_tests.gradle" repositories { diff --git a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-21.0/build.gradle b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-21.0/build.gradle index ceb9d380312..5e345396523 100644 --- a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-21.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-21.0/build.gradle @@ -1,15 +1,15 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_21 - // Structured concurrency is a preview feature in Java 21. Methods (e.g. ShutdownOnFailure) used in this instrumentation test are no longer available in Java 25, so we set the max version to 24. - // See: https://download.java.net/java/early_access/loom/docs/api/java.base/java/util/concurrent/StructuredTaskScope.html - maxJavaVersionForTests = JavaVersion.VERSION_24 -} - apply from: "$rootDir/gradle/java.gradle" // Use slf4j-simple as default; logback has a high chance of getting stuck in a deadlock on CI. apply from: "$rootDir/gradle/slf4j-simple.gradle" apply plugin: 'idea' +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_21 + // Structured concurrency is a preview feature in Java 21. Methods (e.g. ShutdownOnFailure) used in this instrumentation test are no longer available in Java 25, so we set the max version to 24. + // See: https://download.java.net/java/early_access/loom/docs/api/java.base/java/util/concurrent/StructuredTaskScope.html + maxJavaVersion = JavaVersion.VERSION_24 +} + muzzle { pass { coreJdk('21') diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-11.0/build.gradle b/dd-java-agent/instrumentation/java/java-lang/java-lang-11.0/build.gradle index d36b8c37d13..8bec615cd37 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-11.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-11.0/build.gradle @@ -2,13 +2,13 @@ plugins { id 'idea' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'call-site-instrumentation' +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 +} + muzzle { pass { coreJdk() diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-15.0/build.gradle b/dd-java-agent/instrumentation/java/java-lang/java-lang-15.0/build.gradle index 6324aa162dd..d7721a65bca 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-15.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-15.0/build.gradle @@ -2,13 +2,13 @@ plugins { id 'idea' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'call-site-instrumentation' +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_15 +} + muzzle { pass { coreJdk() diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-17.0/build.gradle b/dd-java-agent/instrumentation/java/java-lang/java-lang-17.0/build.gradle index 26a333ab320..ed3d6112b8b 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-17.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-17.0/build.gradle @@ -2,13 +2,13 @@ plugins { id 'idea' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'call-site-instrumentation' +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + muzzle { pass { coreJdk() diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-9.0/build.gradle b/dd-java-agent/instrumentation/java/java-lang/java-lang-9.0/build.gradle index 697ae94d56f..8d59355ee4b 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-9.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-9.0/build.gradle @@ -2,13 +2,13 @@ plugins { id 'idea' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_1_9 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'call-site-instrumentation' +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_1_9 +} + muzzle { pass { coreJdk() diff --git a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/build.gradle b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/build.gradle index 16cac45bf41..5af9c672e94 100644 --- a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { coreJdk('11') @@ -11,6 +7,9 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} tasks.named("compileMain_java11Java", JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_11) diff --git a/dd-java-agent/instrumentation/java/java-nio-1.8/build.gradle b/dd-java-agent/instrumentation/java/java-nio-1.8/build.gradle index 3646b9f5d83..f28fde3a973 100644 --- a/dd-java-agent/instrumentation/java/java-nio-1.8/build.gradle +++ b/dd-java-agent/instrumentation/java/java-nio-1.8/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - excludeJdk = ['SEMERU11', 'SEMERU17'] -} muzzle { pass { coreJdk() @@ -11,6 +7,15 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + excludeJdk = ['SEMERU11', 'SEMERU17'] +} + // Must use Java 11 to build JFR enabled code - there is no JFR in OpenJDK 8 (revisit once JFR in Java 8 is available) ["compileMain_java11Java", "compileTestJava"].each { name -> tasks.named(name, JavaCompile) { diff --git a/dd-java-agent/instrumentation/jdbc/build.gradle b/dd-java-agent/instrumentation/jdbc/build.gradle index 9c1d1d2711e..1aeb3d1965f 100644 --- a/dd-java-agent/instrumentation/jdbc/build.gradle +++ b/dd-java-agent/instrumentation/jdbc/build.gradle @@ -3,10 +3,6 @@ plugins { id 'me.champeau.jmh' } -ext { - latestDepJava11TestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { coreJdk() @@ -99,3 +95,10 @@ tasks.withType(GroovyCompile).configureEach { tasks.withType(Test).configureEach { usesService(testcontainersLimit) } + +tasks.named("latestDepJava11Test", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + diff --git a/dd-java-agent/instrumentation/jersey/build.gradle b/dd-java-agent/instrumentation/jersey/build.gradle index 94ff20d1153..88df73d6974 100644 --- a/dd-java-agent/instrumentation/jersey/build.gradle +++ b/dd-java-agent/instrumentation/jersey/build.gradle @@ -1,9 +1,3 @@ -if (project.hasProperty('testJvm')) { - ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - } -} - muzzle { pass { group = 'org.glassfish.jersey.core' @@ -15,6 +9,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 +} + // there are tests with jersey2 and grizzly on the grizzly-http-2.3.20 module addTestSuiteForDir('jersey2JettyTest', 'jersey2JettyTest') addTestSuiteForDir('jersey3JettyTest', 'jersey3JettyTest') diff --git a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-10.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-10.0/build.gradle index 316435e75a2..00ddd8c272a 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-10.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-10.0/build.gradle @@ -1,6 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = "org.eclipse.jetty" @@ -23,6 +20,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('jetty11Test', 'test') addTestSuiteForDir('jetty10LatestDepTest', 'test') diff --git a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/build.gradle index 7e9852f8d7b..bcb1bd91020 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/build.gradle @@ -1,6 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} muzzle { pass { group = "org.eclipse.jetty" @@ -13,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir('latestDepTest', 'test') tasks.named("compileMain_java17Java", JavaCompile) { diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-10.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-10.0/build.gradle index 55e23c6fb6d..171fe756e58 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-10.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-10.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { name = "10_series" @@ -34,6 +30,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuiteForDir("latestDepTest", "test") addTestSuiteExtendingForDir("latestDepForkedTest", "latestDepTest", "test") diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/build.gradle index 0de01c779fa..111367c055c 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { group = "org.eclipse.jetty" @@ -14,6 +10,10 @@ apply plugin: 'java-test-fixtures' apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('latestDepForkedTest', 'test') diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/build.gradle index c7271771f4c..c7d83b3eac2 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { group = "org.eclipse.jetty" @@ -19,6 +15,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir('latestDepTest', 'test') // ee8 diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle index fbffbe3af73..d3f4629e1c1 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle @@ -22,10 +22,6 @@ muzzle { } } -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} - addTestSuiteForDir('v513Test', 'test') addTestSuiteForDir('latest5Test', 'test') addTestSuiteForDir('latestDepTest', 'test') @@ -66,3 +62,9 @@ configurations.matching { it.name.startsWith('test') }.configureEach { tasks.named("compileLatestDepTestJava", JavaCompile) { configureCompiler(it, 17, JavaVersion.VERSION_1_8) } + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle index 4129d7ce857..3ab1908c6c1 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle @@ -23,10 +23,6 @@ muzzle { } } -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} - addTestSuiteForDir('latestDepTest', 'test') dependencies { @@ -61,3 +57,8 @@ tasks.named("compileLatestDepTestJava", JavaCompile) { configureCompiler(it, 17, JavaVersion.VERSION_1_8) } +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/build.gradle b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/build.gradle index d0e4201049a..29adf1431ee 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/build.gradle +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { group = "org.apache.kafka" @@ -14,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') diff --git a/dd-java-agent/instrumentation/karate/build.gradle b/dd-java-agent/instrumentation/karate/build.gradle index 3b0ce1a8d97..554e73ff277 100644 --- a/dd-java-agent/instrumentation/karate/build.gradle +++ b/dd-java-agent/instrumentation/karate/build.gradle @@ -1,8 +1,3 @@ -ext { - // karate 1.4.0+ requires Java 11 or higher. - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" muzzle { @@ -84,3 +79,11 @@ sourceSets { tasks.named("compileLatestDepTestJava", JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_1_8) } + +tasks.named("latestDepTest", Test) { + // karate 1.4.0+ requires Java 11 or higher. + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + diff --git a/dd-java-agent/instrumentation/log4j/log4j-1.2.4/build.gradle b/dd-java-agent/instrumentation/log4j/log4j-1.2.4/build.gradle index 826bb62b750..0b2759d6d79 100644 --- a/dd-java-agent/instrumentation/log4j/log4j-1.2.4/build.gradle +++ b/dd-java-agent/instrumentation/log4j/log4j-1.2.4/build.gradle @@ -1,8 +1,3 @@ -ext { - // Log4j 1.x reached EOL in 2015 and is not compatible with Java 25+: https://endoflife.date/log4j - maxJavaVersionForTests = JavaVersion.VERSION_24 -} - muzzle { pass { group = 'log4j' @@ -18,6 +13,10 @@ configurations { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // Log4j 1.x reached EOL in 2015 and is not compatible with Java 25+: https://endoflife.date/log4j + maxJavaVersion = JavaVersion.VERSION_24 +} addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/micronaut/http-server-netty-4.0/build.gradle b/dd-java-agent/instrumentation/micronaut/http-server-netty-4.0/build.gradle index 66bbda1af21..1699ecccf8a 100644 --- a/dd-java-agent/instrumentation/micronaut/http-server-netty-4.0/build.gradle +++ b/dd-java-agent/instrumentation/micronaut/http-server-netty-4.0/build.gradle @@ -1,6 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} muzzle { pass { group = "io.micronaut" @@ -12,6 +9,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir('latestDepTest', 'test') ["compileMain_java17Java", "compileTestJava", "compileLatestDepTestJava"].each { diff --git a/dd-java-agent/instrumentation/mule-4.5/build.gradle b/dd-java-agent/instrumentation/mule-4.5/build.gradle index 0064cf9caa1..a1a83b4d2de 100644 --- a/dd-java-agent/instrumentation/mule-4.5/build.gradle +++ b/dd-java-agent/instrumentation/mule-4.5/build.gradle @@ -1,9 +1,3 @@ -ext { - forkedTestMaxJavaVersionForTests = JavaVersion.VERSION_11 - mule46ForkedTestMaxJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepForkedTestMaxJavaVersionForTests = JavaVersion.VERSION_17 -} def muleVersion = '4.5.0' def appDir = "$projectDir/application" @@ -112,6 +106,12 @@ tasks.named("forbiddenApisMain_java11") { failOnMissingClasses = false } +tasks.named("forkedTest", Test) { + testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_11 + } +} + tasks.named("compileTestGroovy", GroovyCompile) { dependsOn 'mvnPackage', 'extractMuleServices' } @@ -129,6 +129,19 @@ tasks.named("compileLatestDepForkedTestJava", JavaCompile) { configureCompiler(it, 17) } +tasks.named("mule46ForkedTest", Test) { + testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + maxJavaVersion = JavaVersion.VERSION_17 + } +} + dependencies { compileOnly group: 'org.mule.runtime', name: 'mule-core', version: muleVersion compileOnly group: 'org.mule.runtime', name: 'mule-tracer-customization-impl', version: muleVersion diff --git a/dd-java-agent/instrumentation/netty/netty-3.8/build.gradle b/dd-java-agent/instrumentation/netty/netty-3.8/build.gradle index 1f836c71824..08a64a9c9eb 100644 --- a/dd-java-agent/instrumentation/netty/netty-3.8/build.gradle +++ b/dd-java-agent/instrumentation/netty/netty-3.8/build.gradle @@ -1,10 +1,9 @@ -// Set properties before any plugins get loaded -ext { - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_1_8 +} + muzzle { pass { group = "io.netty" diff --git a/dd-java-agent/instrumentation/netty/netty-4.0/build.gradle b/dd-java-agent/instrumentation/netty/netty-4.0/build.gradle index 5b27543a6d5..edd1849f100 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.0/build.gradle +++ b/dd-java-agent/instrumentation/netty/netty-4.0/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -// asynchttpclient is not compatible with Java 11 -ext { - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // asynchttpclient is not compatible with Java 11 + maxJavaVersion = JavaVersion.VERSION_1_8 +} + muzzle { pass { group = "io.netty" diff --git a/dd-java-agent/instrumentation/play/play-2.3/build.gradle b/dd-java-agent/instrumentation/play/play-2.3/build.gradle index 82ef4802e68..db3a1389a5a 100644 --- a/dd-java-agent/instrumentation/play/play-2.3/build.gradle +++ b/dd-java-agent/instrumentation/play/play-2.3/build.gradle @@ -1,8 +1,3 @@ -ext { - // Play doesn't work with Java 9+ until 2.6.12 - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - muzzle { extraRepository("typesafe", "https://repo.typesafe.com/typesafe/maven-releases/") @@ -26,6 +21,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // Play doesn't work with Java 9+ until 2.6.12 + maxJavaVersion = JavaVersion.VERSION_1_8 +} + repositories { maven { // only place that has 'com.typesafe.netty:netty-http-pipelining:1.1.2' publicly accessible diff --git a/dd-java-agent/instrumentation/play/play-2.4/build.gradle b/dd-java-agent/instrumentation/play/play-2.4/build.gradle index dcda9f6ce8e..7fd452d0d32 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/build.gradle +++ b/dd-java-agent/instrumentation/play/play-2.4/build.gradle @@ -1,8 +1,3 @@ -ext { - // Play doesn't work with Java 9+ until 2.6.12 - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - muzzle { extraRepository("typesafe", "https://repo.typesafe.com/typesafe/maven-releases/") @@ -37,6 +32,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' +testJvmConstraint { + // Play doesn't work with Java 9+ until 2.6.12 + maxJavaVersion = JavaVersion.VERSION_1_8 +} + repositories { maven { // for muzzle because of play-2.3 diff --git a/dd-java-agent/instrumentation/play/play-2.6/build.gradle b/dd-java-agent/instrumentation/play/play-2.6/build.gradle index 4554bec2259..18b4d4ab8e6 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/build.gradle +++ b/dd-java-agent/instrumentation/play/play-2.6/build.gradle @@ -1,8 +1,3 @@ -ext { - // Play doesn't work with Java 9+ until 2.6.12 - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - def scalaVersion = '2.11' def playVersion = '2.6.0' @@ -55,6 +50,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' +testJvmConstraint { + // Play doesn't work with Java 9+ until 2.6.12 + maxJavaVersion = JavaVersion.VERSION_1_8 +} + repositories { maven { // for muzzle because of play-2.3 diff --git a/dd-java-agent/instrumentation/quartz-2.0/build.gradle b/dd-java-agent/instrumentation/quartz-2.0/build.gradle index b2798c9d115..dbed6431583 100644 --- a/dd-java-agent/instrumentation/quartz-2.0/build.gradle +++ b/dd-java-agent/instrumentation/quartz-2.0/build.gradle @@ -1,7 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - version40TestMinJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = 'org.quartz-scheduler' @@ -17,7 +13,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('version40Test', 'test') - dependencies { compileOnly group: 'org.quartz-scheduler', name: 'quartz', version: '2.0.0' testImplementation group: 'org.quartz-scheduler', name: 'quartz', version: '2.0.0' @@ -42,3 +37,15 @@ dependencies { configureCompiler(it, 11) } } + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("version40Test", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} diff --git a/dd-java-agent/instrumentation/redisson/redisson-2.3.0/build.gradle b/dd-java-agent/instrumentation/redisson/redisson-2.3.0/build.gradle index a331308b921..c6ffc4b3669 100644 --- a/dd-java-agent/instrumentation/redisson/redisson-2.3.0/build.gradle +++ b/dd-java-agent/instrumentation/redisson/redisson-2.3.0/build.gradle @@ -28,7 +28,7 @@ dependencies { project.afterEvaluate { tasks.withType(Test).configureEach { - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_16, [ diff --git a/dd-java-agent/instrumentation/redisson/redisson-3.10.3/build.gradle b/dd-java-agent/instrumentation/redisson/redisson-3.10.3/build.gradle index 897f759cfa7..426b68fb77e 100644 --- a/dd-java-agent/instrumentation/redisson/redisson-3.10.3/build.gradle +++ b/dd-java-agent/instrumentation/redisson/redisson-3.10.3/build.gradle @@ -32,7 +32,7 @@ dependencies { } tasks.withType(Test).configureEach { - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_16, [ diff --git a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/build.gradle b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/build.gradle index 751a4680ec6..917868ef6a2 100644 --- a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/build.gradle +++ b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/build.gradle @@ -1,10 +1,10 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + muzzle { pass { group = 'io.github.resilience4j' diff --git a/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/build.gradle b/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/build.gradle index 674c92af3d5..ecc7121aabc 100644 --- a/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/build.gradle +++ b/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/build.gradle @@ -1,10 +1,10 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + muzzle { pass { group = 'io.github.resilience4j' diff --git a/dd-java-agent/instrumentation/rmi/build.gradle b/dd-java-agent/instrumentation/rmi/build.gradle index 9cc099d2aa8..6e5670b3377 100644 --- a/dd-java-agent/instrumentation/rmi/build.gradle +++ b/dd-java-agent/instrumentation/rmi/build.gradle @@ -1,8 +1,3 @@ -ext { - // TODO Java 17: The necessary packages are not opened on Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - muzzle { pass { coreJdk() @@ -11,6 +6,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // TODO Java 17: The necessary packages are not opened on Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + tasks.withType(JavaCompile).configureEach { configureCompiler(it, 8, JavaVersion.VERSION_1_8, "Need access to sun.rmi package") } diff --git a/dd-java-agent/instrumentation/selenium/build.gradle b/dd-java-agent/instrumentation/selenium/build.gradle index 7c5c008d4d7..f3c992f7a86 100644 --- a/dd-java-agent/instrumentation/selenium/build.gradle +++ b/dd-java-agent/instrumentation/selenium/build.gradle @@ -2,10 +2,6 @@ plugins { id 'java-test-fixtures' } -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" muzzle { @@ -45,3 +41,10 @@ configurations.matching({ it.name.startsWith('test') || it.name.startsWith('late tasks.named("compileLatestDepTestJava", JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_1_8) } + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + diff --git a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/build.gradle b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/build.gradle index 8c8b4f1b6f7..2c7adbc93f1 100644 --- a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/build.gradle +++ b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/build.gradle @@ -15,12 +15,12 @@ muzzle { } } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/build.gradle b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/build.gradle index b7b27117ae8..c9bcbbd142a 100644 --- a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/build.gradle +++ b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/build.gradle @@ -16,12 +16,12 @@ muzzle { } } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 +} + //addTestSuiteForDir('latestDepTest', 'test') // TODO currently 0.42.56 is the latest version. Enable this once the next (0.42.57) is out, add 'latestDepTest' diff --git a/dd-java-agent/instrumentation/spark-executor/build.gradle b/dd-java-agent/instrumentation/spark-executor/build.gradle index 4525dafc370..c8dc975a176 100644 --- a/dd-java-agent/instrumentation/spark-executor/build.gradle +++ b/dd-java-agent/instrumentation/spark-executor/build.gradle @@ -22,12 +22,12 @@ addTestSuite('baseTest') addTestSuiteForDir('latest212DepTest', 'baseTest') addTestSuiteForDir('latest213DepTest', 'baseTest') -ext { +testJvmConstraint { // Hadoop does not behave correctly with OpenJ9 https://issues.apache.org/jira/browse/HADOOP-18174 excludeJdk = ['SEMERU8', 'SEMERU11'] // Spark does not support Java > 11 until 3.3.0 https://issues.apache.org/jira/browse/SPARK-33772 - maxJavaVersionForTests = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_11 } dependencies { diff --git a/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle b/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle index 0f7451a25d7..3b768fb60b4 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle +++ b/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle @@ -22,12 +22,12 @@ addTestSuiteForDir('latestDepTest', 'test') addTestSuite('test_spark24') addTestSuite('test_spark32') -ext { +testJvmConstraint { // Hadoop does not behave correctly with OpenJ9 https://issues.apache.org/jira/browse/HADOOP-18174 excludeJdk = ['SEMERU8', 'SEMERU11'] // Spark does not support Java > 11 until 3.3.0 https://issues.apache.org/jira/browse/SPARK-33772 - maxJavaVersionForTests = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_11 } dependencies { diff --git a/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle b/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle index 0dd13f5c96e..448f1f21647 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle +++ b/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle @@ -25,17 +25,19 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuite('test_spark32') -ext { +testJvmConstraint { // Hadoop does not behave correctly with OpenJ9 https://issues.apache.org/jira/browse/HADOOP-18174 // Hadoop 3.3.1 (used by spark 3.2) does not support IBM java https://issues.apache.org/jira/browse/HADOOP-17971 excludeJdk = ['SEMERU8', 'SEMERU11', 'IBM8'] // Spark does not support Java > 11 until 3.3.0 https://issues.apache.org/jira/browse/SPARK-33772 - maxJavaVersionForTests = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_11 } + configurations.configureEach { resolutionStrategy.deactivateDependencyLocking() } + dependencies { implementation project(':dd-java-agent:instrumentation:spark') diff --git a/dd-java-agent/instrumentation/spring/spring-boot-1.3/build.gradle b/dd-java-agent/instrumentation/spring/spring-boot-1.3/build.gradle index 4c11d333d7d..7ce79de521b 100644 --- a/dd-java-agent/instrumentation/spring/spring-boot-1.3/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-boot-1.3/build.gradle @@ -1,9 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 - boot3TestMinJavaVersionForTests = JavaVersion.VERSION_17 - boot3ForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} muzzle { pass { group = 'org.springframework.boot' @@ -51,3 +45,27 @@ dependencies { latestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-logging', version: '+' latestDepForkedTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-logging', version: '+' } + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("boot3Test", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("boot3ForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/spring/spring-data-1.8/build.gradle b/dd-java-agent/instrumentation/spring/spring-data-1.8/build.gradle index 16299481183..a9f5ab21fce 100644 --- a/dd-java-agent/instrumentation/spring/spring-data-1.8/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-data-1.8/build.gradle @@ -1,8 +1,3 @@ -ext { - // TODO Java 17: This version of spring-data doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - // This file includes software developed at SignalFx muzzle { @@ -27,6 +22,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // TODO Java 17: This version of spring-data doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + addTestSuiteForDir('latestDepTest', 'test') // DQH - API changes that impact instrumentation occurred in spring-data-commons in March 2014. diff --git a/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle index aaee162df55..3a9870ea313 100644 --- a/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle @@ -1,4 +1,3 @@ - muzzle { pass { group = 'org.springframework' @@ -8,12 +7,12 @@ muzzle { } } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + addTestSuiteForDir('latestDepTest', 'test') ["compileTestGroovy", "compileLatestDepTestGroovy"].each { name -> diff --git a/dd-java-agent/instrumentation/spring/spring-scheduling-3.1/build.gradle b/dd-java-agent/instrumentation/spring/spring-scheduling-3.1/build.gradle index 6a17318430c..d6b470cbbdf 100644 --- a/dd-java-agent/instrumentation/spring/spring-scheduling-3.1/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-scheduling-3.1/build.gradle @@ -1,9 +1,3 @@ -ext { - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 - spring6TestMinJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { group = 'org.springframework' @@ -76,3 +70,21 @@ dependencies { latestDepTestImplementation group: 'org.springframework', name: 'spring-context', version: '6.+' latestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '3.+' } + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("spring6Test", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/build.gradle index 67d0c8ae4f2..6d143a3decd 100644 --- a/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/build.gradle @@ -1,8 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 } -apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') final springBootVersion = '3.0.0' diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/build.gradle index c3ca09f8caf..0e4ccd72fcb 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + // test that webflux5 instrumentation works for webflux6 too addTestSuite('iastTest') addTestSuite('bootTest') diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/build.gradle index d68949f6133..95377bf5c18 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { group = 'org.springframework' @@ -14,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir("latestDepTest", "test") ["compileMain_java17Java", "compileTestJava", "compileLatestDepTestJava"].each { diff --git a/dd-java-agent/instrumentation/testng/testng-7/build.gradle b/dd-java-agent/instrumentation/testng/testng-7/build.gradle index 6385a574129..01f585d7555 100644 --- a/dd-java-agent/instrumentation/testng/testng-7/build.gradle +++ b/dd-java-agent/instrumentation/testng/testng-7/build.gradle @@ -2,11 +2,6 @@ plugins { id 'java-test-fixtures' } -ext { - // testng 7.6.0+ requires Java 11 or higher. - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" muzzle { @@ -25,9 +20,16 @@ muzzle { } } -addTestSuiteForDir('latestDepTest', 'test') // testng 7.5.1 is the latest version compatible with Java 8 addTestSuiteForDir('testng751Test', 'test') +addTestSuiteForDir('latestDepTest', 'test') + +tasks.named("latestDepTest", Test) { + // testng 7.6.0+ requires Java 11 or higher. + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} dependencies { compileOnly group: 'org.testng', name: 'testng', version: '7.0.0' diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle index 16c25302bbb..8fa83619d2d 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle +++ b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle @@ -1,10 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latest10TestMinJavaVersionForTests = JavaVersion.VERSION_11 - latest10ForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { // Catalina doesn't reliably depend on coyote, so we use a different dependency that does. pass { @@ -62,7 +55,6 @@ addTestSuite("tomcat9Test") addTestSuiteForDir('latest10Test', 'latestDepTest') addTestSuiteExtendingForDir('latest10ForkedTest', 'latest10Test', 'latestDepTest') - def tomcatVersion = '5.5.12' // earliest 5.5.x available in maven central (with all needed dependencies). configurations.configureEach { @@ -148,7 +140,7 @@ dependencies { tasks.withType(Test).configureEach { // to avoid java.lang.IllegalAccessException: class org.apache.tomcat.util.compat.JreCompat cannot access a member of class java.io.FileSystem (in module java.base) with modifiers "static final" - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_16, ['--add-opens', 'java.base/java.io=ALL-UNNAMED'] @@ -168,3 +160,27 @@ tasks.withType(Test).configureEach { it.exclude group: 'javax.servlet', module: 'servlet-api' } } + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("latest10Test", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latest10ForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} diff --git a/dd-java-agent/instrumentation/undertow/undertow-2.2/build.gradle b/dd-java-agent/instrumentation/undertow/undertow-2.2/build.gradle index e5e8b6b3d99..20271ab0770 100644 --- a/dd-java-agent/instrumentation/undertow/undertow-2.2/build.gradle +++ b/dd-java-agent/instrumentation/undertow/undertow-2.2/build.gradle @@ -1,7 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = "io.undertow" @@ -24,6 +20,7 @@ addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') addTestSuiteForDir('latest22Test', 'test') addTestSuiteExtendingForDir('latest22ForkedTest', 'latest22Test', 'test') + dependencies { compileOnly group: 'io.undertow', name: 'undertow-servlet-jakarta', version: '2.2.14.Final' implementation project(':dd-java-agent:instrumentation:undertow') @@ -48,3 +45,16 @@ dependencies { exclude group: 'io.undertow', module: 'undertow-websocket-jsr-jakarta' } } + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + } +} + diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle index 56f1bf53c32..87c72d86bb7 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { // TODO Java 17: This version of vertx-web doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" - muzzle { pass { group = 'io.vertx' diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle index e2fe7548b0d..800c82b39e0 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { // TODO Java 17: This version of vertx-web doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" - muzzle { pass { group = 'io.vertx' diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/build.gradle index 106cc9860ef..3e81fd85c04 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { // TODO Java 17: This version of vertx-web doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" - muzzle { pass { group = 'io.vertx' diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle index 973810b24c5..fd94e175c3a 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle @@ -1,16 +1,10 @@ -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { // vertx-web doesn't support Java 17 until v4.2 - maxJavaVersionForTests = JavaVersion.VERSION_15 - // unbound it for latest - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepTestMaxJavaVersionForTests = JavaVersion.VERSION_25 - latestDepForkedTestMaxJavaVersionForTests = JavaVersion.VERSION_25 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" - muzzle { pass { group = 'io.vertx' @@ -68,3 +62,18 @@ dependencies { configureCompiler(it, 11) } } + +tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_25 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_25 + } +} + diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/build.gradle index aa38065c277..08ee01eaefc 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/build.gradle @@ -1,9 +1,12 @@ -// Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" + +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) } -apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 +} muzzle { pass { @@ -56,3 +59,4 @@ dependencies { tasks.named("compileJava", JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_1_8) } + diff --git a/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle b/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle index 5bc84784fb8..ee32984f314 100644 --- a/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - minJavaVersionForLatestDepTests = JavaVersion.VERSION_17 -} muzzle { pass { name = "jakarta-websocket" @@ -13,6 +9,11 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 +} + addTestSuiteForDir("latestDepTest", "test") dependencies { @@ -23,3 +24,9 @@ dependencies { testImplementation group: 'org.glassfish.tyrus', name: 'tyrus-container-inmemory', version: '2.0.0' latestDepTestImplementation group: 'org.glassfish.tyrus', name: 'tyrus-container-inmemory', version: '+' } + +tasks.named('latestDepTest', Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle index 2a012a08b81..b3b9ae3bad3 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { name = 'jetty-websocket-10' @@ -15,6 +11,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuite("latestDepTest") tasks.named("compileMain_java11Java", JavaCompile) { diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle index 8bffea9cfe4..9f824b32c24 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { name = 'jetty-websocket-11' @@ -15,6 +11,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 +} + addTestSuite("latestDepTest") ["compileTestGroovy", "compileLatestDepTestGroovy"].each { name -> diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle index ca29fca2746..8813f7e985c 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { name = 'jetty-websocket-12ee8' @@ -28,6 +24,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + addTestSuiteForDir("latestDepTest", "test") ["compileTestGroovy", "compileLatestDepTestGroovy"].each { name -> diff --git a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle index 3d31584c469..b265325998d 100644 --- a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle +++ b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle @@ -1,9 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} - repositories { maven { url = 'https://maven.repository.redhat.com/ga/' @@ -22,6 +16,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 +} + addTestSuiteForDir("latestDepTest", "test") addTestSuiteExtendingForDir("latestDepForkedTest", "latestDepTest", "test") @@ -109,11 +107,10 @@ tasks.named("forkedTest", Test) { dependsOn 'extractWildfly' } -tasks.named("latestDepForkedTest", Test) { - dependsOn 'extractLatestWildfly' -} - tasks.named("latestDepTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } dependsOn 'extractLatestWildfly' } @@ -174,6 +171,9 @@ tasks.named("forkedTest", Test) { } tasks.named("latestDepForkedTest", Test) { + testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 + } jvmArgumentProviders.add( objects.newInstance(DistributionLocationProvider).tap { distribution = extractLatestWildfly.map { it.destinationDir } diff --git a/dd-smoke-tests/appsec/springboot-grpc/build.gradle b/dd-smoke-tests/appsec/springboot-grpc/build.gradle index 30c12e961de..e00e38e5543 100644 --- a/dd-smoke-tests/appsec/springboot-grpc/build.gradle +++ b/dd-smoke-tests/appsec/springboot-grpc/build.gradle @@ -4,13 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { - // TODO Java 17: This version of spring-boot doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + // TODO Java 17: This version of spring-boot doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} // The standard spring-boot plugin doesn't play nice with our project // so we'll build a fat jar instead tasks.named("jar", Jar) { diff --git a/dd-smoke-tests/armeria-grpc/build.gradle b/dd-smoke-tests/armeria-grpc/build.gradle index fc5977dedcf..51fdf76da9e 100644 --- a/dd-smoke-tests/armeria-grpc/build.gradle +++ b/dd-smoke-tests/armeria-grpc/build.gradle @@ -2,12 +2,12 @@ plugins { id 'com.google.protobuf' version '0.9.3' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + sourceSets { main { proto { diff --git a/dd-smoke-tests/concurrent/java-21/build.gradle b/dd-smoke-tests/concurrent/java-21/build.gradle index 86d1d025105..7e7ed8ad7f4 100644 --- a/dd-smoke-tests/concurrent/java-21/build.gradle +++ b/dd-smoke-tests/concurrent/java-21/build.gradle @@ -5,13 +5,13 @@ plugins { id 'com.gradleup.shadow' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_21 - maxJavaVersionForTests = JavaVersion.VERSION_25 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_21 + maxJavaVersion = JavaVersion.VERSION_25 +} + description = 'JDK 21 Concurrent Integration Tests' java { diff --git a/dd-smoke-tests/concurrent/java-25/build.gradle b/dd-smoke-tests/concurrent/java-25/build.gradle index 59be13d01a9..27a65676239 100644 --- a/dd-smoke-tests/concurrent/java-25/build.gradle +++ b/dd-smoke-tests/concurrent/java-25/build.gradle @@ -5,19 +5,19 @@ plugins { id 'com.gradleup.shadow' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { // This smoke test should be limited to Java 25 and above // But the groovy testing framework cannot run on Java 25 // Using Java 8 for now and runs a JVM 25 when forking tests process. // Relying on forked JVM 25 is hardcoded in the test suites (see createProcessBuilder()). - minJavaVersionForTests = JavaVersion.VERSION_1_8 - maxJavaVersionForTests = JavaVersion.VERSION_1_8 + minJavaVersion = JavaVersion.VERSION_1_8 + maxJavaVersion = JavaVersion.VERSION_1_8 // Only runs on Temurin build as it spawns a Temurin 25 for test process. excludeJdk = ['IBM8', 'SEMERU8'] } -apply from: "$rootDir/gradle/java.gradle" - description = 'JDK 25 Concurrent Integration Tests' javaToolchains { diff --git a/dd-smoke-tests/crashtracking/build.gradle b/dd-smoke-tests/crashtracking/build.gradle index 7c3772504e0..7466c74bbd2 100644 --- a/dd-smoke-tests/crashtracking/build.gradle +++ b/dd-smoke-tests/crashtracking/build.gradle @@ -4,12 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { excludeJdk = ['IBM8'] } -apply from: "$rootDir/gradle/java.gradle" - description = 'Crashtracking Integration Tests.' tasks.named("jar", Jar) { diff --git a/dd-smoke-tests/java9-modules/build.gradle b/dd-smoke-tests/java9-modules/build.gradle index 4f050d0d65f..cbe671bbdf5 100644 --- a/dd-smoke-tests/java9-modules/build.gradle +++ b/dd-smoke-tests/java9-modules/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + tasks.named("jar", Jar) { manifest { attributes('Main-Class': 'datadog.smoketest.moduleapp.ModuleApplication') diff --git a/dd-smoke-tests/jboss-modules/build.gradle b/dd-smoke-tests/jboss-modules/build.gradle index b3cc061d502..f984854a870 100644 --- a/dd-smoke-tests/jboss-modules/build.gradle +++ b/dd-smoke-tests/jboss-modules/build.gradle @@ -1,12 +1,11 @@ +apply from: "$rootDir/gradle/java.gradle" +description = 'JBoss Modules Smoke Tests.' -ext { +testJvmConstraint { // see https://datadoghq.atlassian.net/wiki/x/H4S2NQE excludeJdk = ['IBM8'] } -apply from: "$rootDir/gradle/java.gradle" -description = 'JBoss Modules Smoke Tests.' - configurations { register('jbossModulesV1') register('jbossModulesV2') diff --git a/dd-smoke-tests/kafka-3/build.gradle b/dd-smoke-tests/kafka-3/build.gradle index 0d593aa2006..fb812f69987 100644 --- a/dd-smoke-tests/kafka-3/build.gradle +++ b/dd-smoke-tests/kafka-3/build.gradle @@ -1,9 +1,10 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'java-test-fixtures' + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + description = 'Kafka 3.x Smoke Tests.' dependencies { diff --git a/dd-smoke-tests/play-2.4/build.gradle b/dd-smoke-tests/play-2.4/build.gradle index a20064aee21..18420fd742f 100644 --- a/dd-smoke-tests/play-2.4/build.gradle +++ b/dd-smoke-tests/play-2.4/build.gradle @@ -2,12 +2,13 @@ plugins { id 'org.gradle.playframework' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { // TODO Java 17: This version of play doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/dd-smoke-tests/play-common/fix-play-routes.gradle" def playVer = "2.4.11" diff --git a/dd-smoke-tests/play-2.5/build.gradle b/dd-smoke-tests/play-2.5/build.gradle index d4c8b14cee1..26ad9ae45ea 100644 --- a/dd-smoke-tests/play-2.5/build.gradle +++ b/dd-smoke-tests/play-2.5/build.gradle @@ -2,14 +2,14 @@ plugins { id 'org.gradle.playframework' } -ext { - // TODO Java 17: This version of play doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/dd-smoke-tests/play-common/fix-play-routes.gradle" +testJvmConstraint { + // TODO Java 17: This version of play doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + def playVer = "2.5.19" def scalaVer = System.getProperty("scala.binary.version", /* default = */ "2.11") diff --git a/dd-smoke-tests/play-2.6/build.gradle b/dd-smoke-tests/play-2.6/build.gradle index f2454a82f89..d29558c97e9 100644 --- a/dd-smoke-tests/play-2.6/build.gradle +++ b/dd-smoke-tests/play-2.6/build.gradle @@ -2,14 +2,14 @@ plugins { id 'org.gradle.playframework' } -ext { - // TODO Java 17: This version of play doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/dd-smoke-tests/play-common/fix-play-routes.gradle" +testJvmConstraint { + // TODO Java 17: This version of play doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + def playVer = "2.6.25" def scalaVer = System.getProperty("scala.binary.version", /* default = */ "2.12") diff --git a/dd-smoke-tests/play-2.7/build.gradle b/dd-smoke-tests/play-2.7/build.gradle index 543e37bad7b..b38d73f3ce6 100644 --- a/dd-smoke-tests/play-2.7/build.gradle +++ b/dd-smoke-tests/play-2.7/build.gradle @@ -2,14 +2,14 @@ plugins { id 'org.gradle.playframework' } -ext { - // TODO Java 17: This version of play doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/dd-smoke-tests/play-common/fix-play-routes.gradle" +testJvmConstraint { + // TODO Java 17: This version of play doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + def playVer = "2.7.9" def scalaVer = System.getProperty("scala.version", /* default = */ "2.13") diff --git a/dd-smoke-tests/profiling-integration-tests/build.gradle b/dd-smoke-tests/profiling-integration-tests/build.gradle index 934a093faf5..6755bde3d26 100644 --- a/dd-smoke-tests/profiling-integration-tests/build.gradle +++ b/dd-smoke-tests/profiling-integration-tests/build.gradle @@ -4,12 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { excludeJdk = ['IBM8'] } -apply from: "$rootDir/gradle/java.gradle" - description = 'Profiling Integration Tests.' tasks.named("jar", Jar) { diff --git a/dd-smoke-tests/quarkus/build.gradle b/dd-smoke-tests/quarkus/build.gradle index e85c9653377..25e3d6cb27a 100644 --- a/dd-smoke-tests/quarkus/build.gradle +++ b/dd-smoke-tests/quarkus/build.gradle @@ -1,10 +1,10 @@ -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { // Quarkus is only supported up to Java 21: https://github.com/quarkusio/quarkus - maxJavaVersionForTests = JavaVersion.VERSION_21 + maxJavaVersion = JavaVersion.VERSION_21 } -apply from: "$rootDir/gradle/java.gradle" - dependencies { testImplementation project(':dd-smoke-tests') } diff --git a/dd-smoke-tests/rum/tomcat-10/build.gradle b/dd-smoke-tests/rum/tomcat-10/build.gradle index 20954f3c2c4..396c0bb8a25 100644 --- a/dd-smoke-tests/rum/tomcat-10/build.gradle +++ b/dd-smoke-tests/rum/tomcat-10/build.gradle @@ -4,11 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 } -apply from: "$rootDir/gradle/java.gradle" description = 'RUM Tomcat 10 Smoke Tests' dependencies { diff --git a/dd-smoke-tests/rum/tomcat-11/build.gradle b/dd-smoke-tests/rum/tomcat-11/build.gradle index b1f100486bf..d2407f96318 100644 --- a/dd-smoke-tests/rum/tomcat-11/build.gradle +++ b/dd-smoke-tests/rum/tomcat-11/build.gradle @@ -4,11 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 } -apply from: "$rootDir/gradle/java.gradle" description = 'RUM Tomcat 11 Smoke Tests' dependencies { diff --git a/dd-smoke-tests/rum/wildfly-15/build.gradle b/dd-smoke-tests/rum/wildfly-15/build.gradle index e5e033007d8..2237d9afb7b 100644 --- a/dd-smoke-tests/rum/wildfly-15/build.gradle +++ b/dd-smoke-tests/rum/wildfly-15/build.gradle @@ -4,7 +4,6 @@ ext { serverModule = 'wildfly' serverVersion = '15.0.0.Final' serverExtension = 'zip' - maxJavaVersionForTests = JavaVersion.VERSION_11 } repositories { @@ -23,6 +22,10 @@ repositories { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_11 +} + description = 'Wildfly Smoke Tests.' configurations { diff --git a/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle b/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle index 47ea9095ff9..c9e7e9c87c6 100644 --- a/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + description = 'Spring Boot 3.0 Webflux Smoke Tests.' dependencies { diff --git a/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle b/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle index 7ecbb274737..5a244180280 100644 --- a/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + description = 'Spring Boot 3.0 WebMvc Smoke Tests.' dependencies { diff --git a/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle b/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle index 1c027cc7aca..da870c2c256 100644 --- a/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle +++ b/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 +} + description = 'Spring Boot 3.3 WebMvc Smoke Tests.' dependencies { diff --git a/dd-smoke-tests/spring-security/build.gradle b/dd-smoke-tests/spring-security/build.gradle index 0193dd0603d..40da5faafb4 100644 --- a/dd-smoke-tests/spring-security/build.gradle +++ b/dd-smoke-tests/spring-security/build.gradle @@ -2,11 +2,12 @@ plugins { id 'java-test-fixtures' } -ext { - maxJavaVersionForTests = JavaVersion.VERSION_15 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" description = 'Spring Security Smoke Tests.' // The standard spring-boot plugin doesn't play nice with our project diff --git a/dd-smoke-tests/springboot-grpc/build.gradle b/dd-smoke-tests/springboot-grpc/build.gradle index 072bf5b65f5..8c38e1b433f 100644 --- a/dd-smoke-tests/springboot-grpc/build.gradle +++ b/dd-smoke-tests/springboot-grpc/build.gradle @@ -5,12 +5,13 @@ plugins { id 'com.google.protobuf' version '0.8.18' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { // TODO Java 17: This version of spring-boot doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" description = 'SpringBoot/gRPC combined Smoke Tests.' protobuf { diff --git a/dd-smoke-tests/springboot-java-11/build.gradle b/dd-smoke-tests/springboot-java-11/build.gradle index 17d299c8984..7b5a582a4b8 100644 --- a/dd-smoke-tests/springboot-java-11/build.gradle +++ b/dd-smoke-tests/springboot-java-11/build.gradle @@ -7,11 +7,12 @@ plugins { id 'java-test-fixtures' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_11 } -apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/gradle/spring-boot-plugin.gradle" description = 'SpringBoot Java 11 Smoke Tests.' diff --git a/dd-smoke-tests/springboot-java-17/build.gradle b/dd-smoke-tests/springboot-java-17/build.gradle index 6dc9908b0c9..fd512120c56 100644 --- a/dd-smoke-tests/springboot-java-17/build.gradle +++ b/dd-smoke-tests/springboot-java-17/build.gradle @@ -7,11 +7,12 @@ plugins { id 'java-test-fixtures' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + minJavaVersion = JavaVersion.VERSION_17 } -apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/gradle/spring-boot-plugin.gradle" description = 'SpringBoot Java 17 Smoke Tests.' diff --git a/dd-smoke-tests/springboot/build.gradle b/dd-smoke-tests/springboot/build.gradle index 9b825da8375..5cd3f548725 100644 --- a/dd-smoke-tests/springboot/build.gradle +++ b/dd-smoke-tests/springboot/build.gradle @@ -5,11 +5,12 @@ plugins { id 'java-test-fixtures' } -ext { - maxJavaVersionForTests = JavaVersion.VERSION_15 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" description = 'SpringBoot Smoke Tests.' // The standard spring-boot plugin doesn't play nice with our project diff --git a/dd-smoke-tests/wildfly/build.gradle b/dd-smoke-tests/wildfly/build.gradle index b35ea823fd3..2fd2dd4f545 100644 --- a/dd-smoke-tests/wildfly/build.gradle +++ b/dd-smoke-tests/wildfly/build.gradle @@ -4,7 +4,6 @@ ext { serverModule = 'wildfly' serverVersion = '15.0.0.Final' serverExtension = 'zip' - maxJavaVersionForTests = JavaVersion.VERSION_11 } repositories { @@ -23,6 +22,10 @@ repositories { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraint { + maxJavaVersion = JavaVersion.VERSION_11 +} + description = 'Wildfly Smoke Tests.' configurations { diff --git a/gradle/java_no_deps.gradle b/gradle/java_no_deps.gradle index 4a4e93f7667..9a03336d6fa 100644 --- a/gradle/java_no_deps.gradle +++ b/gradle/java_no_deps.gradle @@ -1,9 +1,9 @@ -import java.nio.file.Files -import java.nio.file.Paths -import org.gradle.api.internal.provider.PropertyFactory -import org.gradle.jvm.toolchain.internal.SpecificInstallationToolchainSpec +import datadog.gradle.plugin.testJvmConstraints.TestJvmConstraintsExtension +import datadog.gradle.plugin.testJvmConstraints.ProvideJvmArgsOnJvmLauncherVersion +import groovy.transform.CompileStatic apply plugin: 'java-library' +apply plugin: 'datadog.test-jvm-contraints' apply from: "$rootDir/gradle/codenarc.gradle" apply from: "$rootDir/gradle/forbiddenapis.gradle" @@ -12,6 +12,111 @@ apply from: "$rootDir/gradle/spotbugs.gradle" apply from: "$rootDir/gradle/repositories.gradle" apply from: "$rootDir/gradle/test-suites.gradle" +// Glue code for Groovy DSL. +// TODO this extension need to go away once we move to convention plugins +ext.configureCompiler = (AbstractCompile it, int toolchainVersion, JavaVersion compatibilityVersion = null, String unsetReleaseFlagReason = null) -> { + configureCompiler(it, toolchainVersion, compatibilityVersion, unsetReleaseFlagReason) +} as Closure + +@CompileStatic +interface TracerSourceSetConfig { + /** + * Additional sourceSet output is added as `compileOnly` rather than `implementation`. + * + * This is useful to avoid some classes to be added to add classes to the wrog jar prefix. + */ + Property getCompileOnly() + + /** + * Whether to apply or not the JavaVersion to tests sources, default to `true`. + * + * In some cases we would like to avoid setting java version to for tests. + * For example we would like to be able to run profiling tests with `ZULU8`, + * but we cannot run it with other JDK8 implementations at the moment + */ + Property getApplyForTestSources() +} + +@CompileStatic +class TracerJavaExtension { + public static String NAME = "tracerJava" + private ObjectFactory objects + private Project project + + TracerJavaExtension(ObjectFactory objects, ProviderFactory providers, Project project) { + this.project = project + this.objects = objects + } + + /** + * Same as [addSourceSetFor] used for compatibility when used in kotlin scripts within `withGroovyBuilder`. + * + * Once moved to convention plugins this can go away. + * + * @param javaVersion The wanted java version for these source. + * @param sourceSetOptions + */ + def addSourceSetFor(JavaVersion javaVersion, Map sourceSetOptions) { + addSourceSetFor(javaVersion) { + it.compileOnly.set(sourceSetOptions.getOrDefault('compileOnly', false)) + it.applyForTestSources.set(sourceSetOptions.getOrDefault('applyForTestSources', true)) + } + } + + /** + * Adds the source set `src/main/javaXX`, configures its compilation and its test jvm constraints. + * + * @param javaVersion The wanted java version for these source. + * @param sourceSetConfigurer Options for this source set. + */ + def addSourceSetFor(JavaVersion javaVersion, Action sourceSetConfigurer = null) { + def sourceSetConfig = objects.newInstance(TracerSourceSetConfig) + if (sourceSetConfigurer != null) { + sourceSetConfigurer.execute(sourceSetConfig) + } + project.extensions.getByType(TestJvmConstraintsExtension).minJavaVersion.set(javaVersion) + + def version = javaVersion + def name = "java${version.majorVersion}" + def sourceSets = project.extensions.getByType(SourceSetContainer) + + def mainForJavaVersionSourceSet = sourceSets.create("${SourceSet.MAIN_SOURCE_SET_NAME}_$name") { + (it as SourceSet).java.srcDirs = ["${project.projectDir}/src/${SourceSet.MAIN_SOURCE_SET_NAME}/$name"] + } + + // TODO Make 'configureCompiler' a general utility method + def configureCompilerCl = project.extensions.getByType(ExtraPropertiesExtension).get("configureCompiler") as Closure + project.tasks.named(mainForJavaVersionSourceSet.compileJavaTaskName, JavaCompile) { + configureCompilerCl.call(it, version.majorVersion.toInteger().intValue(), version) + } + + if (sourceSetConfig.applyForTestSources.orElse(true)) { + // configures all test tasks + project.tasks.withType(JavaCompile).configureEach { + if (it.name.toLowerCase().contains("test")) { + configureCompilerCl.call(it, version.majorVersion.toInteger().intValue(), version) + } + } + } + + // "socket-utils" is only set to compileOnly because the implementation dependency incorrectly adds Java17 classes to all jar prefixes. + // This causes the AgentJarIndex to search for other non-Java17 classes in the wrong prefix location and fail to resolve class names. + if (sourceSetConfig.compileOnly.orElse(false).get()) { + project.dependencies.add("compileOnly", mainForJavaVersionSourceSet.output) + } else { + project.dependencies.add("compileOnly", project.files(mainForJavaVersionSourceSet.compileClasspath)) + project.dependencies.add("implementation", mainForJavaVersionSourceSet.output) + } + + project.tasks.named("jar", Jar) { + it.from(mainForJavaVersionSourceSet.output) + } + } +} +def tracerJavaExtension = extensions.create(TracerJavaExtension.NAME, TracerJavaExtension, objects, providers, project) + + + // Only run one testcontainers test at a time ext.testcontainersLimit = gradle.sharedServices.registerIfAbsent("testcontainersLimit", BuildService) { maxParallelUsages = 1 @@ -25,13 +130,15 @@ if (tasks.matching({ it.name == 'forkedTest' }).empty) { } def applyCodeCoverage = !( - project.path.startsWith(":dd-smoke-tests") || - project.path == ":dd-java-agent" || - project.path == ":dd-java-agent:load-generator" || - project.path.startsWith(":dd-java-agent:benchmark") || - project.path.startsWith(":dd-java-agent:instrumentation") || - project.path.startsWith(":dd-java-agent:appsec:weblog:")) - +project.path.startsWith(":dd-smoke-tests") || +project.path == ":dd-java-agent" || +project.path == ":dd-java-agent:load-generator" || +project.path.startsWith(":dd-java-agent:benchmark") || +project.path.startsWith(":dd-java-agent:instrumentation") || +project.path.startsWith(":dd-java-agent:appsec:weblog:")) + +// https://stackoverflow.com/questions/42501869/gradle-skip-jacoco-during-test +// https://poetengineer.postach.io/post/how-to-conditionally-enable-disable-jacoco-in-gradle-build if (applyCodeCoverage) { apply from: "$rootDir/gradle/jacoco.gradle" } @@ -47,46 +154,6 @@ java { withSourcesJar() } -if (project.hasProperty('minJavaVersionForTests') && project.findProperty('minJavaVersionForTests') != JavaVersion.VERSION_1_7) { - def version = JavaVersion.toVersion(project.findProperty('minJavaVersionForTests')) - def name = "java${version.majorVersion}" - def mainForJavaVersionSourceSet = sourceSets.create("main_$name") { - java.srcDirs = ["${project.projectDir}/src/main/$name"] - } - - // Task name is registered when source set was created - tasks.named(mainForJavaVersionSourceSet.compileJavaTaskName, JavaCompile) { - configureCompiler(it, version.majorVersion.toInteger().intValue(), version) - } - - // "socket-utils" is only set to compileOnly because the implementation dependency incorrectly adds Java17 classes to all jar prefixes. - // This causes the AgentJarIndex to search for other non-Java17 classes in the wrong prefix location and fail to resolve class names. - dependencies { - if ("${project.projectDir}".endsWith("socket-utils")) { - compileOnly(files(project.sourceSets."main_$name".output)) - } else { - compileOnly(files(project.sourceSets."main_$name".compileClasspath)) - implementation(files(project.sourceSets."main_$name".output)) - } - } - - tasks.named("jar", Jar) { - from sourceSets."main_$name".output - } - - // In some cases we would like to avoid setting java version to `minJavaVersionForTests`. - // For example we would like to be able to run profiling tests with ZULU8, but we cannot run it with other JDK8 implementations at the moment - def skipSettingTestJavaVersion = project.hasProperty('skipSettingTestJavaVersion') && project.findProperty('skipSettingTestJavaVersion') - if (!skipSettingTestJavaVersion) { - tasks.withType(JavaCompile).configureEach { - if (it.name.toLowerCase().contains("test")) { - sourceCompatibility = version - targetCompatibility = version - } - } - } -} - tasks.named("jar", Jar) { /** Make Jar build fail on duplicate files @@ -103,11 +170,11 @@ tasks.named("jar", Jar) { manifest { attributes( - "Implementation-Title": project.name, - "Implementation-Version": project.version, - "Implementation-Vendor": "Datadog", - "Implementation-URL": "https://github.com/datadog/dd-trace-java", - ) + "Implementation-Title": project.name, + "Implementation-Version": project.version, + "Implementation-Vendor": "Datadog", + "Implementation-URL": "https://github.com/datadog/dd-trace-java", + ) } } @@ -138,37 +205,7 @@ tasks.named("javadoc", Javadoc) { } } -class ProvideJvmArgsOnJvmLauncherVersion implements CommandLineArgumentProvider { - @Internal - Test test - @Input - JavaVersion applyFromVersion - @Input - List jvmArgsToApply - @Input - Provider additionalCondition - - ProvideJvmArgsOnJvmLauncherVersion(Test test, JavaVersion applyFromVersion, List jvmArgsToApply, Provider additionalCondition) { - this.test = test - this.applyFromVersion = applyFromVersion - this.jvmArgsToApply = jvmArgsToApply - this.additionalCondition = additionalCondition - } - - @Override - Iterable asArguments() { - def launcherVersion = test.javaLauncher.map { JavaVersion.toVersion(it.metadata.languageVersion.asInt()) } - .orElse(JavaVersion.current()) - .get() - - if (launcherVersion.isCompatibleWith(applyFromVersion) && additionalCondition.getOrElse(true)) { - jvmArgsToApply - } else { - [] - } - } -} -ext.configureJvmArgs = (Test testTask, JavaVersion applyFromVersion, List jvmArgsToApply, Provider additionalCondition = null) -> { +ext.conditionalJvmArgs = (Test testTask, JavaVersion applyFromVersion, List jvmArgsToApply, Provider additionalCondition = null) -> { testTask.jvmArgumentProviders.add(new ProvideJvmArgsOnJvmLauncherVersion( testTask, applyFromVersion, @@ -177,102 +214,16 @@ ext.configureJvmArgs = (Test testTask, JavaVersion applyFromVersion, List - if (testJvm.isBlank()) { - throw new GradleException("testJvm property is blank") - } - - // "stable" is calculated as the largest X found in JAVA_X_HOME - if (testJvm == "stable") { - def javaVersions = providers.environmentVariablesPrefixedBy("JAVA_").map { javaHomes -> - javaHomes - .findAll { it.key =~ /^JAVA_[0-9]+_HOME$/ } - .collect { (it.key =~ /^JAVA_(\d+)_HOME$/)[0][1] as Integer } - }.get() - - if (javaVersions.isEmpty()) { - throw new GradleException("No valid JAVA_X_HOME environment variables found.") - } - - javaVersions.max().toString() - } else { - testJvm - } - }.map { logger.info("normalized testJvm: " + it); it } - - def testJvmHomePath = normalizedTestJvm.map { - if (Files.exists(Paths.get(it))) { - getJavaHomePath(it) - } else { - def matcher = it =~ /([a-zA-Z]*)([0-9]+)/ - if (!matcher.matches()) { - throw new GradleException("Unable to find launcher for Java '$it'. It needs to match '([a-zA-Z]*)([0-9]+)'.") - } - def testJvmLanguageVersion = matcher.group(2) as Integer - def testJvmEnv = "JAVA_${it}_HOME" - def testJvmHome = providers.environmentVariable(testJvmEnv).orNull - if (!testJvmHome) { - throw new GradleException("Unable to find launcher for Java '$it'. Have you set '$testJvmEnv'?") - } - - getJavaHomePath(testJvmHome) - } - }.map { logger.info("testJvm home path: " + it); it } - - def javaTestLauncher = testJvmHomePath.zip(normalizedTestJvm) { testJvmHome, testJvm -> - // Only change test JVM if it's not the one we are running the gradle build with - if (currentJavaHomePath == testJvmHome) { - null - } else { - def jvmSpec = new SpecificInstallationToolchainSpec(project.services.get(PropertyFactory), file(testJvmHome)) - // The provider always says that a value is present so we need to wrap it for proper error messages - - javaToolchains.launcherFor(jvmSpec).orElse(providers.provider { - throw new GradleException("Unable to find launcher for Java $testJvm. Does '$testJvmHome' point to a JDK?") - }) - } - }.flatMap { it }.map { logger.info("testJvm launcher: " + it.executablePath); it } - - // Apply the launcher - tasks.withType(Test).configureEach { Test testTask -> - if (javaTestLauncher.isPresent()) { - javaLauncher = javaTestLauncher - onlyIf("Allowed or forced JDK") { - !isJdkExcluded(normalizedTestJvm.get()) && - (isJavaLanguageVersionAllowed(javaTestLauncher.get().metadata.languageVersion, it.name) || isJdkForced(normalizedTestJvm.get())) - } - - // Disable jacoco for additional 'testJvm' tests to speed things up a bit - if (applyCodeCoverage) { - jacoco { - enabled = false - } - } - } else { - onlyIf("is current Daemon JVM allowed") { isJavaVersionAllowed(JavaVersion.current(), testTask.name) } - } - - // temporary workaround when using Java16+: some tests require reflective access to java.lang/java.util - configureJvmArgs( - testTask, - JavaVersion.VERSION_16, - ['--add-opens=java.base/java.lang=ALL-UNNAMED', '--add-opens=java.base/java.util=ALL-UNNAMED'], - project.providers.provider { project.properties['allowReflectiveAccessToJdk'] as Boolean }.orElse(true) - ) - - if (configurations.hasProperty("latestDepTestRuntimeClasspath")) { - doFirst { - def testArtifacts = configurations.testRuntimeClasspath.resolvedConfiguration.resolvedArtifacts - def latestTestArtifacts = configurations.latestDepTestRuntimeClasspath.resolvedConfiguration.resolvedArtifacts - assert testArtifacts != latestTestArtifacts: "latestDepTest dependencies are identical to test" - } +// TODO move to test-suites config ? +tasks.withType(Test).configureEach { Test testTask -> + if (configurations.hasProperty("latestDepTestRuntimeClasspath")) { + doFirst { + def testArtifacts = configurations.testRuntimeClasspath.resolvedConfiguration.resolvedArtifacts + def latestTestArtifacts = configurations.latestDepTestRuntimeClasspath.resolvedConfiguration.resolvedArtifacts + assert testArtifacts != latestTestArtifacts: "latestDepTest dependencies are identical to test" } } } -configureTestJvm(project, applyCodeCoverage) [JavaCompile, ScalaCompile, GroovyCompile].each { type -> @@ -351,8 +302,10 @@ tasks.withType(JavaCompile).configureEach { * For java changes the compiler from the toolchain, and adapts its configuration. * * For Groovy and Scala compile tasks only sets the launcher. + * + * NOTE: This function is exposed via a closure */ -ext.configureCompiler = (AbstractCompile it, int toolchainVersion, JavaVersion compatibilityVersion = null, String unsetReleaseFlagReason = null) -> { +def configureCompiler(AbstractCompile it, int toolchainVersion, JavaVersion compatibilityVersion = null, String unsetReleaseFlagReason = null) { Provider compiler = javaToolchains.compilerFor { languageVersion = JavaLanguageVersion.of(toolchainVersion) } @@ -401,7 +354,7 @@ ext.configureCompiler = (AbstractCompile it, int toolchainVersion, JavaVersion c } catch (NoSuchElementException ignored) { throw new GradleException("Unable to find compiler for Java $toolchainVersion. Have you set JAVA_${toolchainVersion}_HOME?") } -} as Closure +} ext.configureGroovyCompiler = (int toolchainVersion, String... taskNames) -> { taskNames.each { taskName -> @@ -421,52 +374,6 @@ ext.getJavaLauncherFor = (javaVersionInteger) -> { return launcher } as Closure> -def isJavaVersionAllowedForProperty(JavaVersion version, String propertyPrefix = "") { - def minProp = propertyPrefix.isEmpty() ? 'minJavaVersionForTests' : "${propertyPrefix}MinJavaVersionForTests" - def maxProp = propertyPrefix.isEmpty() ? 'maxJavaVersionForTests' : "${propertyPrefix}MaxJavaVersionForTests" - def definedMin = project.hasProperty(minProp) - def definedMax = project.hasProperty(maxProp) - if (definedMin && project.findProperty(minProp).compareTo(version) > 0) { - logger.info("isJavaVersionAllowedForProperty is false b/o minProp=${minProp} is defined and greater than version=${version}") - return false - } - //default to the general min if defined and specific one is was not defined - if (!propertyPrefix.isEmpty() && !definedMin && project.hasProperty('minJavaVersionForTests') && project.findProperty('minJavaVersionForTests').compareTo(version) > 0) { - logger.info("isJavaVersionAllowedForProperty is false b/o minJavaVersionForTests=${project.findProperty('minJavaVersionForTests')} is defined and greater than version=${version}") - return false - } - if (definedMax && project.findProperty(maxProp).compareTo(version) < 0) { - logger.info("isJavaVersionAllowedForProperty is false b/o maxProp=${project.findProperty(maxProp)} is defined and lower than version=${version}") - return false - } - if (!propertyPrefix.isEmpty() && !definedMax && project.hasProperty('maxJavaVersionForTests') && project.findProperty('maxJavaVersionForTests').compareTo(version) < 0) { - logger.info("isJavaVersionAllowedForProperty is false b/o maxJavaVersionForTests=${project.findProperty('maxJavaVersionForTests')} is defined and lower than version=${version}") - return false - } - return true -} - -def isJavaVersionAllowed(JavaVersion version, String testTaskName) { - return isJavaVersionAllowedForProperty(version, testTaskName) -} - -def isJavaLanguageVersionAllowed(JavaLanguageVersion languageVersion, String testTaskName) { - def version = JavaVersion.toVersion(languageVersion.asInt()) - return isJavaVersionAllowed(version, testTaskName) -} - -def isJdkForced(String javaName) { - return (project.hasProperty('forceJdk') && project.findProperty('forceJdk').any { it.equalsIgnoreCase(javaName) }) -} - -def isJdkExcluded(String javaName) { - return (project.hasProperty('excludeJdk') && project.findProperty('excludeJdk').any { it.equalsIgnoreCase(javaName) }) -} - -def getJavaHomePath(String path) { - def javaHome = new File(path).toPath().toRealPath() - return javaHome.endsWith("jre") ? javaHome.parent : javaHome -} tasks.register('testJar', Jar) { dependsOn(testClasses) diff --git a/internal-api/internal-api-9/build.gradle.kts b/internal-api/internal-api-9/build.gradle.kts index f8af68a73d9..fa799f17919 100644 --- a/internal-api/internal-api-9/build.gradle.kts +++ b/internal-api/internal-api-9/build.gradle.kts @@ -8,10 +8,12 @@ plugins { idea } -val minJavaVersionForTests by extra(JavaVersion.VERSION_11) - apply(from = "$rootDir/gradle/java.gradle") +extensions.getByName("tracerJava").withGroovyBuilder { + invokeMethod("addSourceSetFor", JavaVersion.VERSION_17) +} + java { toolchain { languageVersion = JavaLanguageVersion.of(11) diff --git a/utils/socket-utils/build.gradle.kts b/utils/socket-utils/build.gradle.kts index d76f3dd0b77..58d865be284 100644 --- a/utils/socket-utils/build.gradle.kts +++ b/utils/socket-utils/build.gradle.kts @@ -7,10 +7,12 @@ plugins { idea } -val minJavaVersionForTests by extra(JavaVersion.VERSION_17) - apply(from = "$rootDir/gradle/java.gradle") +extensions.getByName("tracerJava").withGroovyBuilder { + invokeMethod("addSourceSetFor", arrayOf(JavaVersion.VERSION_17, mapOf("compileOnly" to true))) +} + dependencies { implementation(libs.slf4j) implementation(project(":internal-api"))