in maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java [2677:2718]
private TestClassPath generateTestClasspath() throws MojoFailureException {
Set<Artifact> classpathArtifacts = getProject().getArtifacts();
if (getClasspathDependencyScopeExclude() != null
&& !getClasspathDependencyScopeExclude().isEmpty()) {
ArtifactFilter dependencyFilter = new ScopeArtifactFilter(getClasspathDependencyScopeExclude());
classpathArtifacts = filterArtifacts(classpathArtifacts, dependencyFilter);
}
if (getClasspathDependencyExcludes() != null) {
List<String> excludedDependencies = asList(getClasspathDependencyExcludes());
ArtifactFilter dependencyFilter = new PatternIncludesArtifactFilter(excludedDependencies);
classpathArtifacts = filterArtifacts(classpathArtifacts, dependencyFilter);
}
Map<String, Artifact> dependencyConflictIdsProjectArtifacts = classpathArtifacts.stream()
.collect(Collectors.toMap(Artifact::getDependencyConflictId, Function.identity()));
Set<String> additionalClasspathElements = new LinkedHashSet<>();
if (getAdditionalClasspathElements() != null) {
Arrays.stream(getAdditionalClasspathElements()).forEach(additionalClasspathElements::add);
}
if (additionalClasspathDependencies != null && !additionalClasspathDependencies.isEmpty()) {
Collection<Artifact> additionalArtifacts = resolveDependencies(additionalClasspathDependencies);
// check for potential conflicts with project dependencies
for (Artifact additionalArtifact : additionalArtifacts) {
Artifact conflictingArtifact =
dependencyConflictIdsProjectArtifacts.get(additionalArtifact.getDependencyConflictId());
if (conflictingArtifact != null
&& !additionalArtifact.getVersion().equals(conflictingArtifact.getVersion())) {
getConsoleLogger()
.warning(
"Potential classpath conflict between project dependency and resolved additionalClasspathDependency: Found multiple versions of "
+ additionalArtifact.getDependencyConflictId() + ": "
+ additionalArtifact.getVersion() + " and "
+ conflictingArtifact.getVersion());
}
additionalClasspathElements.add(additionalArtifact.getFile().getAbsolutePath());
}
}
return new TestClassPath(
classpathArtifacts, getMainBuildPath(), getTestClassesDirectory(), additionalClasspathElements);
}