private TestClassPath generateTestClasspath()

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);
    }