Skip to content

Implement tests reordering for JUnit 4 #8650

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Apr 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.continue.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ instrumentation_modules: &instrumentation_modules "dd-java-agent/instrumentation
debugger_modules: &debugger_modules "dd-java-agent/agent-debugger|dd-java-agent/agent-bootstrap|dd-java-agent/agent-builder|internal-api|communication|dd-trace-core"
profiling_modules: &profiling_modules "dd-java-agent/agent-profiling"

default_system_tests_commit: &default_system_tests_commit 55cc62fb333b8de1466f8a0ecfdfa55fe9f57031
default_system_tests_commit: &default_system_tests_commit 2799fa982318da14c9d3e5f722abdc670d2802c3

parameters:
nightly:
Expand Down
38 changes: 20 additions & 18 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,26 @@ dd-java-agent/agent-bootstrap/src/main/java11/datadog/trace/bootstrap/instrument
dd-smoke-tests/profiling-integration-tests/ @DataDog/profiling-java

# @DataDog/ci-app-libraries-java
dd-java-agent/agent-ci-visibility/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/cucumber/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/jacoco/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/junit-4.10/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/junit-5.3/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/karate/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/scalatest/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/selenium/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/testng/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/gradle-3.0/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/gradle-8.3/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/maven-3.2.1/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/weaver/ @DataDog/ci-app-libraries-java
dd-smoke-tests/gradle/ @DataDog/ci-app-libraries-java
dd-smoke-tests/maven/ @DataDog/ci-app-libraries-java
**/civisibility/ @DataDog/ci-app-libraries-java
**/CiVisibility*.java @DataDog/ci-app-libraries-java
**/CiVisibility*.groovy @DataDog/ci-app-libraries-java
dd-java-agent/agent-ci-visibility/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/cucumber/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/jacoco/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/junit-4.10/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/junit-5.3/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/karate/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/scalatest/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/selenium/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/testng/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/gradle-3.0/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/gradle-8.3/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/gradle-testing/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/maven-3.2.1/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/maven-surefire/ @DataDog/ci-app-libraries-java
dd-java-agent/instrumentation/weaver/ @DataDog/ci-app-libraries-java
dd-smoke-tests/gradle/ @DataDog/ci-app-libraries-java
dd-smoke-tests/maven/ @DataDog/ci-app-libraries-java
**/civisibility/ @DataDog/ci-app-libraries-java
**/CiVisibility*.java @DataDog/ci-app-libraries-java
**/CiVisibility*.groovy @DataDog/ci-app-libraries-java

# @DataDog/debugger-java (Live Debugger)
dd-java-agent/agent-debugger/ @DataDog/debugger-java
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -388,11 +388,7 @@ abstract class CiVisibilityInstrumentationTest extends AgentTestRunner {
TEST_WRITER.waitForTraces(expectedOrder.size() + 1)
def traces = TEST_WRITER.toList()
def events = getEventsAsJson(traces)
def identifiers = getTestIdentifiers(events)
if (identifiers != expectedOrder) {
throw new AssertionError("Expected order: $expectedOrder, but got: $identifiers")
}
return true
return CiVisibilityTestUtils.assertTestsOrder(events, expectedOrder)
}

def assertCapabilities(Collection<LibraryCapability> capabilities, int expectedTraceCount) {
Expand All @@ -411,17 +407,6 @@ abstract class CiVisibilityInstrumentationTest extends AgentTestRunner {
return true
}

def getTestIdentifiers(List<Map> events) {
events.sort(Comparator.comparing { it['content']['start'] as Long })
def testIdentifiers = []
for (Map event : events) {
if (event['content']['meta']['test.name']) {
testIdentifiers.add(test(event['content']['meta']['test.suite'] as String, event['content']['meta']['test.name'] as String))
}
}
return testIdentifiers
}

def test(String suite, String name) {
return new TestFQN(suite, name)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package datadog.trace.civisibility


import datadog.trace.api.civisibility.config.TestFQN
import spock.lang.Specification

abstract class CiVisibilitySmokeTest extends Specification {
Expand All @@ -16,6 +16,14 @@ abstract class CiVisibilitySmokeTest extends Specification {
}
}

protected test(String suiteName, String testName) {
return new TestFQN(suiteName, testName)
}

protected verifyTestOrder(List<Map<String, Object>> events, List<TestFQN> expectedOrder) {
CiVisibilityTestUtils.assertTestsOrder(events, expectedOrder)
}

/**
* This is a basic sanity check for telemetry metrics.
* It only checks that the reported number of events created and finished is as expected.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.jayway.jsonpath.ReadContext
import com.jayway.jsonpath.WriteContext
import datadog.trace.api.DDSpanTypes
import datadog.trace.api.civisibility.config.LibraryCapability
import datadog.trace.api.civisibility.config.TestFQN
import datadog.trace.core.DDSpan
import freemarker.core.Environment
import freemarker.core.InvalidReferenceException
Expand Down Expand Up @@ -136,6 +137,25 @@ abstract class CiVisibilityTestUtils {
return replacementMap
}

static boolean assertTestsOrder(List<Map<?, ?>> events, List<TestFQN> expectedOrder) {
def identifiers = getTestIdentifiers(events)
if (identifiers != expectedOrder) {
throw new AssertionError("Expected order: $expectedOrder, but got: $identifiers")
}
return true
}

static List<TestFQN> getTestIdentifiers(List<Map<?,?>> events) {
events.sort(Comparator.comparing { it['content']['start'] as Long })
def testIdentifiers = []
for (Map event : events) {
if (event['content']['meta']['test.name']) {
testIdentifiers.add(new TestFQN(event['content']['meta']['test.suite'] as String, event['content']['meta']['test.name'] as String))
}
}
return testIdentifiers
}

static List<Map<?, ?>> removeTags(List<Map<?, ?>> events, List<String> tags) {
def filteredEvents = []

Expand Down
17 changes: 17 additions & 0 deletions dd-java-agent/instrumentation/gradle-testing/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
apply from: "$rootDir/gradle/java.gradle"

repositories {
maven {
url "https://repo.gradle.org/artifactory/libs-releases-local"
}
}

// gradle >= v5.1
dependencies {
compileOnly gradleApi()
compileOnly project(":dd-java-agent:instrumentation:junit-4.10")
}

forbiddenApisMain {
failOnMissingClasses = false
}
156 changes: 156 additions & 0 deletions dd-java-agent/instrumentation/gradle-testing/gradle.lockfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
# This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised.
# This file is expected to be part of source control.
cafe.cryptography:curve25519-elisabeth:0.1.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
cafe.cryptography:ed25519-elisabeth:0.1.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
ch.qos.logback:logback-classic:1.2.3=testCompileClasspath,testRuntimeClasspath
ch.qos.logback:logback-core:1.2.3=testCompileClasspath,testRuntimeClasspath
com.beust:jcommander:1.78=testRuntimeClasspath
com.blogspot.mydailyjava:weak-lock-free:0.17=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.datadoghq.okhttp3:okhttp:3.12.15=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.datadoghq.okio:okio:1.17.6=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.datadoghq:dd-javac-plugin-client:0.2.2=compileClasspath,instrumentPluginClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.datadoghq:java-dogstatsd-client:4.4.3=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.datadoghq:sketches-java:0.8.3=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.github.javaparser:javaparser-core:3.25.1=testCompileClasspath,testRuntimeClasspath
com.github.jnr:jffi:1.3.13=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.github.jnr:jnr-a64asm:1.0.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.github.jnr:jnr-constants:0.10.4=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.github.jnr:jnr-enxio:0.32.17=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.github.jnr:jnr-ffi:2.2.16=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.github.jnr:jnr-posix:3.1.19=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.github.jnr:jnr-unixsocket:0.38.22=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.github.jnr:jnr-x86asm:1.0.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.github.spotbugs:spotbugs-annotations:4.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath
com.github.spotbugs:spotbugs-annotations:4.7.3=spotbugs
com.github.spotbugs:spotbugs:4.7.3=spotbugs
com.github.stefanbirkner:system-rules:1.19.0=testCompileClasspath,testRuntimeClasspath
com.google.auto.service:auto-service-annotations:1.0-rc7=annotationProcessor,compileClasspath,testAnnotationProcessor,testCompileClasspath
com.google.auto.service:auto-service:1.0-rc7=annotationProcessor,testAnnotationProcessor
com.google.auto:auto-common:0.10=annotationProcessor,testAnnotationProcessor
com.google.code.findbugs:jsr305:3.0.2=annotationProcessor,compileClasspath,spotbugs,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath
com.google.code.gson:gson:2.9.1=spotbugs
com.google.errorprone:error_prone_annotations:2.2.0=annotationProcessor,testAnnotationProcessor
com.google.guava:failureaccess:1.0.1=annotationProcessor,testAnnotationProcessor
com.google.guava:guava:20.0=testCompileClasspath,testRuntimeClasspath
com.google.guava:guava:27.0.1-jre=annotationProcessor,testAnnotationProcessor
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,testAnnotationProcessor
com.google.j2objc:j2objc-annotations:1.1=annotationProcessor,testAnnotationProcessor
com.google.re2j:re2j:1.7=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
com.squareup.moshi:moshi:1.11.0=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.squareup.okhttp3:logging-interceptor:3.12.12=testCompileClasspath,testRuntimeClasspath
com.squareup.okhttp3:okhttp:3.12.12=testCompileClasspath,testRuntimeClasspath
com.squareup.okio:okio:1.17.5=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.thoughtworks.qdox:qdox:1.12.1=testRuntimeClasspath
commons-codec:commons-codec:1.15=spotbugs
commons-fileupload:commons-fileupload:1.5=testCompileClasspath,testRuntimeClasspath
commons-io:commons-io:2.11.0=testCompileClasspath,testRuntimeClasspath
de.thetaphi:forbiddenapis:3.8=compileClasspath
info.picocli:picocli:4.6.3=testRuntimeClasspath
io.sqreen:libsqreen:12.0.0=testRuntimeClasspath
javax.servlet:javax.servlet-api:3.1.0=testCompileClasspath,testRuntimeClasspath
jaxen:jaxen:1.2.0=spotbugs
jline:jline:2.14.6=testRuntimeClasspath
junit:junit-dep:4.11=testCompileClasspath,testRuntimeClasspath
junit:junit:4.13.2=testCompileClasspath,testRuntimeClasspath
net.bytebuddy:byte-buddy-agent:1.14.18=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
net.bytebuddy:byte-buddy:1.14.18=compileClasspath,instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
net.java.dev.jna:jna-platform:5.8.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
net.java.dev.jna:jna:5.8.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
net.jcip:jcip-annotations:1.0=compileClasspath,spotbugs,testCompileClasspath,testRuntimeClasspath
net.sf.saxon:Saxon-HE:11.4=spotbugs
org.apache.ant:ant-antlr:1.10.12=testRuntimeClasspath
org.apache.ant:ant-antlr:1.9.15=codenarc
org.apache.ant:ant-junit:1.10.12=testRuntimeClasspath
org.apache.ant:ant-junit:1.9.15=codenarc
org.apache.ant:ant-launcher:1.10.12=testRuntimeClasspath
org.apache.ant:ant:1.10.12=testCompileClasspath,testRuntimeClasspath
org.apache.bcel:bcel:6.5.0=spotbugs
org.apache.commons:commons-lang3:3.12.0=spotbugs
org.apache.commons:commons-text:1.10.0=spotbugs
org.apache.httpcomponents.client5:httpclient5:5.1.3=spotbugs
org.apache.httpcomponents.core5:httpcore5-h2:5.1.3=spotbugs
org.apache.httpcomponents.core5:httpcore5:5.1.3=spotbugs
org.apache.logging.log4j:log4j-api:2.19.0=spotbugs
org.apache.logging.log4j:log4j-core:2.19.0=spotbugs
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath
org.checkerframework:checker-qual:2.5.2=annotationProcessor,testAnnotationProcessor
org.codehaus.groovy:groovy-all:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-ant:2.5.14=codenarc
org.codehaus.groovy:groovy-ant:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-astbuilder:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-cli-picocli:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-console:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-datetime:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-docgenerator:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-groovydoc:2.5.14=codenarc
org.codehaus.groovy:groovy-groovydoc:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-groovysh:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-jmx:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-json:2.5.14=codenarc
org.codehaus.groovy:groovy-json:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-jsr223:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-macro:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-nio:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-servlet:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-sql:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-swing:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-templates:2.5.14=codenarc
org.codehaus.groovy:groovy-templates:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-test-junit5:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-test:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-testng:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy-xml:2.5.14=codenarc
org.codehaus.groovy:groovy-xml:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.groovy:groovy:2.5.14=codenarc
org.codehaus.groovy:groovy:3.0.17=testCompileClasspath,testRuntimeClasspath
org.codehaus.mojo:animal-sniffer-annotations:1.17=annotationProcessor,testAnnotationProcessor
org.codenarc:CodeNarc:2.2.0=codenarc
org.dom4j:dom4j:2.1.3=spotbugs
org.eclipse.jetty:jetty-http:9.4.56.v20240826=testCompileClasspath,testRuntimeClasspath
org.eclipse.jetty:jetty-io:9.4.56.v20240826=testCompileClasspath,testRuntimeClasspath
org.eclipse.jetty:jetty-server:9.4.56.v20240826=testCompileClasspath,testRuntimeClasspath
org.eclipse.jetty:jetty-util:9.4.56.v20240826=testCompileClasspath,testRuntimeClasspath
org.gmetrics:GMetrics:1.1=codenarc
org.hamcrest:hamcrest-core:1.3=testCompileClasspath,testRuntimeClasspath
org.hamcrest:hamcrest:2.2=testCompileClasspath,testRuntimeClasspath
org.jctools:jctools-core:3.3.0=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.9.2=testCompileClasspath,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.9.2=testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.9.2=testCompileClasspath,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.9.2=testCompileClasspath,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.9.2=testRuntimeClasspath
org.junit.platform:junit-platform-runner:1.9.2=testRuntimeClasspath
org.junit.platform:junit-platform-suite-api:1.9.2=testRuntimeClasspath
org.junit.platform:junit-platform-suite-commons:1.9.2=testRuntimeClasspath
org.junit:junit-bom:5.9.1=spotbugs
org.junit:junit-bom:5.9.2=testCompileClasspath,testRuntimeClasspath
org.objenesis:objenesis:3.3=testCompileClasspath,testRuntimeClasspath
org.opentest4j:opentest4j:1.2.0=testCompileClasspath,testRuntimeClasspath
org.ow2.asm:asm-analysis:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
org.ow2.asm:asm-analysis:9.4=spotbugs
org.ow2.asm:asm-commons:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath
org.ow2.asm:asm-commons:9.4=spotbugs
org.ow2.asm:asm-commons:9.7.1=testRuntimeClasspath
org.ow2.asm:asm-tree:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath
org.ow2.asm:asm-tree:9.4=spotbugs
org.ow2.asm:asm-tree:9.7.1=testRuntimeClasspath
org.ow2.asm:asm-util:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath
org.ow2.asm:asm-util:9.4=spotbugs
org.ow2.asm:asm:9.2=instrumentPluginClasspath,muzzleTooling,runtimeClasspath
org.ow2.asm:asm:9.4=spotbugs
org.ow2.asm:asm:9.7.1=testRuntimeClasspath
org.slf4j:jcl-over-slf4j:1.7.30=testCompileClasspath,testRuntimeClasspath
org.slf4j:jul-to-slf4j:1.7.30=testCompileClasspath,testRuntimeClasspath
org.slf4j:log4j-over-slf4j:1.7.30=testCompileClasspath,testRuntimeClasspath
org.slf4j:slf4j-api:1.7.30=compileClasspath,instrumentPluginClasspath,muzzleBootstrap,muzzleTooling,runtimeClasspath,testCompileClasspath
org.slf4j:slf4j-api:1.7.32=testRuntimeClasspath
org.slf4j:slf4j-api:2.0.0=spotbugs,spotbugsSlf4j
org.slf4j:slf4j-simple:2.0.0=spotbugsSlf4j
org.spockframework:spock-core:2.2-groovy-3.0=testCompileClasspath,testRuntimeClasspath
org.spockframework:spock-junit4:2.2-groovy-3.0=testCompileClasspath,testRuntimeClasspath
org.testng:testng:7.5=testRuntimeClasspath
org.webjars:jquery:3.5.1=testRuntimeClasspath
org.xmlresolver:xmlresolver:4.4.3=spotbugs
xml-apis:xml-apis:1.4.01=spotbugs
empty=spotbugsPlugins
Loading