This is an automated email from the ASF dual-hosted git repository. sjaranowski pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-pmd-plugin.git
The following commit(s) were added to refs/heads/master by this push: new aca73a5 Get rid of maven-artifact-transfer and other legacy stuff aca73a5 is described below commit aca73a58967da09378cddc0c6ae10b09c7132dfb Author: Slawomir Jaranowski <s.jaranow...@gmail.com> AuthorDate: Mon May 26 23:43:28 2025 +0200 Get rid of maven-artifact-transfer and other legacy stuff - use resolver API for resolving dependencies - introduce ConfigurationService as util where we will be able to move the methods needed for preparing configuration for PMDExecutor --- pom.xml | 40 +------ .../plugins/pmd/AggregatorPmdNoForkReport.java | 5 +- .../maven/plugins/pmd/AggregatorPmdReport.java | 5 +- .../maven/plugins/pmd/ConfigurationService.java | 119 +++++++++++++++++++++ .../org/apache/maven/plugins/pmd/PmdReport.java | 57 ++-------- .../plugins/pmd/AbstractPmdReportTestCase.java | 14 ++- 6 files changed, 143 insertions(+), 97 deletions(-) diff --git a/pom.xml b/pom.xml index 5362737..4596f97 100644 --- a/pom.xml +++ b/pom.xml @@ -114,12 +114,6 @@ under the License. <version>${mavenVersion}</version> <scope>provided</scope> </dependency> - <dependency> - <groupId>org.apache.maven</groupId> - <artifactId>maven-compat</artifactId> - <version>${mavenVersion}</version> - <scope>provided</scope> - </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> @@ -132,27 +126,11 @@ under the License. <version>${version.maven-plugin-tools}</version> <scope>provided</scope> </dependency> - <dependency> - <groupId>org.apache.maven.shared</groupId> - <artifactId>maven-artifact-transfer</artifactId> - <version>0.13.1</version> - </dependency> <dependency> <groupId>org.eclipse.sisu</groupId> <artifactId>org.eclipse.sisu.plexus</artifactId> <scope>provided</scope> </dependency> - <dependency> - <groupId>org.apache.maven.shared</groupId> - <artifactId>maven-common-artifact-filters</artifactId> - <version>3.4.0</version> - <exclusions> - <exclusion> - <groupId>org.sonatype.sisu</groupId> - <artifactId>sisu-inject-plexus</artifactId> - </exclusion> - </exclusions> - </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-embedder</artifactId> @@ -257,14 +235,8 @@ under the License. <dependency> <groupId>org.apache.maven.plugin-testing</groupId> <artifactId>maven-plugin-testing-harness</artifactId> - <version>3.3.0</version> + <version>4.0.0-alpha-2</version> <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-container-default</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>com.github.tomakehurst</groupId> @@ -282,7 +254,6 @@ under the License. <groupId>org.apache.maven.resolver</groupId> <artifactId>maven-resolver-api</artifactId> <version>${resolverVersion}</version> - <scope>test</scope> </dependency> <dependency> <groupId>org.apache.maven.resolver</groupId> @@ -298,16 +269,10 @@ under the License. </dependency> <dependency> <groupId>org.apache.maven.resolver</groupId> - <artifactId>maven-resolver-transport-wagon</artifactId> + <artifactId>maven-resolver-transport-http</artifactId> <version>${resolverVersion}</version> <scope>test</scope> </dependency> - <dependency> - <groupId>org.apache.maven.wagon</groupId> - <artifactId>wagon-http-lightweight</artifactId> - <version>3.5.3</version> - <scope>test</scope> - </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> @@ -430,6 +395,7 @@ under the License. <configuration> <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath> <debug>false</debug> + <showErrors>true</showErrors> <goals> <goal>clean</goal> <goal>site</goal> diff --git a/src/main/java/org/apache/maven/plugins/pmd/AggregatorPmdNoForkReport.java b/src/main/java/org/apache/maven/plugins/pmd/AggregatorPmdNoForkReport.java index 8932ce3..c95e09a 100644 --- a/src/main/java/org/apache/maven/plugins/pmd/AggregatorPmdNoForkReport.java +++ b/src/main/java/org/apache/maven/plugins/pmd/AggregatorPmdNoForkReport.java @@ -25,7 +25,6 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.plugins.pmd.exec.PmdServiceExecutor; -import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver; import org.codehaus.plexus.i18n.I18N; import org.codehaus.plexus.resource.ResourceManager; @@ -45,9 +44,9 @@ public class AggregatorPmdNoForkReport extends AggregatorPmdReport { @Inject public AggregatorPmdNoForkReport( ResourceManager locator, - DependencyResolver dependencyResolver, + ConfigurationService configurationService, I18N i18n, PmdServiceExecutor serviceExecutor) { - super(locator, dependencyResolver, i18n, serviceExecutor); + super(locator, configurationService, i18n, serviceExecutor); } } diff --git a/src/main/java/org/apache/maven/plugins/pmd/AggregatorPmdReport.java b/src/main/java/org/apache/maven/plugins/pmd/AggregatorPmdReport.java index 822820b..02f7726 100644 --- a/src/main/java/org/apache/maven/plugins/pmd/AggregatorPmdReport.java +++ b/src/main/java/org/apache/maven/plugins/pmd/AggregatorPmdReport.java @@ -25,7 +25,6 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.plugins.pmd.exec.PmdServiceExecutor; -import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver; import org.codehaus.plexus.i18n.I18N; import org.codehaus.plexus.resource.ResourceManager; @@ -42,10 +41,10 @@ public class AggregatorPmdReport extends PmdReport { @Inject public AggregatorPmdReport( ResourceManager locator, - DependencyResolver dependencyResolver, + ConfigurationService configurationService, I18N i18n, PmdServiceExecutor serviceExecutor) { - super(locator, dependencyResolver, i18n, serviceExecutor); + super(locator, configurationService, i18n, serviceExecutor); } @Override diff --git a/src/main/java/org/apache/maven/plugins/pmd/ConfigurationService.java b/src/main/java/org/apache/maven/plugins/pmd/ConfigurationService.java new file mode 100644 index 0000000..b5fd5aa --- /dev/null +++ b/src/main/java/org/apache/maven/plugins/pmd/ConfigurationService.java @@ -0,0 +1,119 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.maven.plugins.pmd; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Provider; +import javax.inject.Singleton; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.apache.maven.RepositoryUtils; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.DependencyManagement; +import org.apache.maven.project.MavenProject; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.artifact.ArtifactTypeRegistry; +import org.eclipse.aether.collection.CollectRequest; +import org.eclipse.aether.resolution.ArtifactResult; +import org.eclipse.aether.resolution.DependencyRequest; +import org.eclipse.aether.resolution.DependencyResolutionException; +import org.eclipse.aether.resolution.DependencyResult; + +/** + * utils service for provide configuration needed to execute CPD/PMD. + */ +@Named +@Singleton +public class ConfigurationService { + + private final Provider<MavenSession> sessionProvider; + + private final org.eclipse.aether.RepositorySystem repositorySystem; + + @Inject + public ConfigurationService( + Provider<MavenSession> sessionProvider, org.eclipse.aether.RepositorySystem repositorySystem) { + this.sessionProvider = sessionProvider; + this.repositorySystem = repositorySystem; + } + + public List<File> resolveDependenciesAsFile( + MavenProject localProject, Collection<MavenProject> aggregatedProjects, boolean includeTests) + throws DependencyResolutionException { + + RepositorySystemSession repositorySession = sessionProvider.get().getRepositorySession(); + ArtifactTypeRegistry artifactTypeRegistry = repositorySession.getArtifactTypeRegistry(); + + List<String> includesScope = + includeTests ? Arrays.asList("compile", "provided", "test") : Arrays.asList("compile", "provided"); + + // collect exclusions for projects within the reactor + // if module a depends on module b and both are in the reactor + // then we don't want to resolve the dependency as an artifact. + List<String> exclusionPatterns = new ArrayList<>(); + for (MavenProject project : aggregatedProjects) { + exclusionPatterns.add(getExclusionKey(project)); + } + + List<org.eclipse.aether.graph.Dependency> dependencies = localProject.getDependencies().stream() + .filter(dependency -> includesScope.contains(dependency.getScope())) + .filter(dependency -> !exclusionPatterns.contains(getExclusionKey(dependency))) + .map(d -> RepositoryUtils.toDependency(d, artifactTypeRegistry)) + .collect(Collectors.toList()); + + List<org.eclipse.aether.graph.Dependency> dependencyManagements = Optional.ofNullable( + localProject.getDependencyManagement()) + .map(DependencyManagement::getDependencies) + .map(Collection::stream) + .orElse(Stream.empty()) + .map(d -> RepositoryUtils.toDependency(d, artifactTypeRegistry)) + .collect(Collectors.toList()); + + CollectRequest collectRequest = + new CollectRequest(dependencies, dependencyManagements, localProject.getRemoteProjectRepositories()); + DependencyRequest request = new DependencyRequest(collectRequest, null); + + DependencyResult result = + repositorySystem.resolveDependencies(sessionProvider.get().getRepositorySession(), request); + + return result.getArtifactResults().stream() + .map(ArtifactResult::getArtifact) + .map(Artifact::getFile) + .collect(Collectors.toList()); + } + + private String getExclusionKey(Dependency dependency) { + return dependency.getGroupId() + ":" + dependency.getArtifactId(); + } + + private String getExclusionKey(MavenProject project) { + return project.getGroupId() + ":" + project.getArtifactId(); + } +} diff --git a/src/main/java/org/apache/maven/plugins/pmd/PmdReport.java b/src/main/java/org/apache/maven/plugins/pmd/PmdReport.java index 3a2899f..d16845d 100644 --- a/src/main/java/org/apache/maven/plugins/pmd/PmdReport.java +++ b/src/main/java/org/apache/maven/plugins/pmd/PmdReport.java @@ -24,11 +24,11 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Locale; import net.sourceforge.pmd.renderers.Renderer; -import org.apache.maven.model.Dependency; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; @@ -36,16 +36,8 @@ import org.apache.maven.plugins.pmd.exec.PmdExecutor; import org.apache.maven.plugins.pmd.exec.PmdRequest; import org.apache.maven.plugins.pmd.exec.PmdResult; import org.apache.maven.plugins.pmd.exec.PmdServiceExecutor; -import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.MavenProject; -import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.reporting.MavenReportException; -import org.apache.maven.shared.artifact.filter.resolve.AndFilter; -import org.apache.maven.shared.artifact.filter.resolve.ExclusionsFilter; -import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter; -import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter; -import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult; -import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver; import org.codehaus.plexus.i18n.I18N; import org.codehaus.plexus.resource.ResourceManager; import org.codehaus.plexus.resource.loader.FileResourceCreationException; @@ -234,8 +226,6 @@ public class PmdReport extends AbstractPmdReport { */ private final ResourceManager locator; - private final DependencyResolver dependencyResolver; - /** * Internationalization component */ @@ -243,6 +233,8 @@ public class PmdReport extends AbstractPmdReport { private final PmdServiceExecutor serviceExecutor; + private final ConfigurationService configurationService; + /** * Contains the result of the last PMD execution. * It might be <code>null</code> which means, that PMD @@ -253,11 +245,11 @@ public class PmdReport extends AbstractPmdReport { @Inject public PmdReport( ResourceManager locator, - DependencyResolver dependencyResolver, + ConfigurationService configurationService, I18N i18n, PmdServiceExecutor serviceExecutor) { this.locator = locator; - this.dependencyResolver = dependencyResolver; + this.configurationService = configurationService; this.i18n = i18n; this.serviceExecutor = serviceExecutor; } @@ -479,37 +471,11 @@ public class PmdReport extends AbstractPmdReport { List<String> classpath = new ArrayList<>(); if (isAggregator()) { List<String> dependencies = new ArrayList<>(); - - // collect exclusions for projects within the reactor - // if module a depends on module b and both are in the reactor - // then we don't want to resolve the dependency as an artifact. - List<String> exclusionPatterns = new ArrayList<>(); - for (MavenProject localProject : getAggregatedProjects()) { - exclusionPatterns.add(localProject.getGroupId() + ":" + localProject.getArtifactId()); - } - TransformableFilter filter = new AndFilter(Arrays.asList( - new ExclusionsFilter(exclusionPatterns), - includeTests - ? ScopeFilter.including("compile", "provided", "test") - : ScopeFilter.including("compile", "provided"))); - - for (MavenProject localProject : getAggregatedProjects()) { - ProjectBuildingRequest buildingRequest = - new DefaultProjectBuildingRequest(session.getProjectBuildingRequest()); - // use any additional configured repo as well - buildingRequest.getRemoteRepositories().addAll(localProject.getRemoteArtifactRepositories()); - - List<Dependency> managedDependencies = localProject.getDependencyManagement() == null - ? null - : localProject.getDependencyManagement().getDependencies(); - Iterable<ArtifactResult> resolvedDependencies = dependencyResolver.resolveDependencies( - buildingRequest, localProject.getDependencies(), managedDependencies, filter); - - for (ArtifactResult resolvedArtifact : resolvedDependencies) { - dependencies.add( - resolvedArtifact.getArtifact().getFile().toString()); - } - + Collection<MavenProject> aggregatedProjects = getAggregatedProjects(); + for (MavenProject localProject : aggregatedProjects) { + configurationService + .resolveDependenciesAsFile(localProject, aggregatedProjects, includeTests) + .forEach(file -> dependencies.add(file.getAbsolutePath())); // Add the project's classes first classpath.addAll( includeTests @@ -527,8 +493,7 @@ public class PmdReport extends AbstractPmdReport { getLog().debug("Using aux classpath: " + classpath); } - String path = StringUtils.join(classpath.iterator(), File.pathSeparator); - return path; + return StringUtils.join(classpath.iterator(), File.pathSeparator); } catch (Exception e) { throw new MavenReportException(e.getMessage(), e); } diff --git a/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTestCase.java b/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTestCase.java index 7f821af..8ff17f3 100644 --- a/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTestCase.java +++ b/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTestCase.java @@ -90,19 +90,17 @@ public abstract class AbstractPmdReportTestCase extends AbstractMojoTestCase { MavenSession mavenSession = newMavenSession(new MavenProjectStub()); sessionScope.seed(MavenSession.class, mavenSession); - LegacySupport legacySupport = lookup(LegacySupport.class); - legacySupport.setSession(mavenSession); - DefaultRepositorySystemSession repoSession = - (DefaultRepositorySystemSession) legacySupport.getRepositorySession(); - repoSession.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory() - .newInstance(repoSession, new LocalRepository(artifactStubFactory.getWorkingDir()))); + DefaultRepositorySystemSession repositorySession = + (DefaultRepositorySystemSession) mavenSession.getRepositorySession(); + repositorySession.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory() + .newInstance(repositorySession, new LocalRepository(artifactStubFactory.getWorkingDir()))); List<MavenProject> reactorProjects = mojo.getReactorProjects() != null ? mojo.getReactorProjects() : Collections.emptyList(); setVariableValueToObject(mojo, "mojoExecution", getMockMojoExecution()); - setVariableValueToObject(mojo, "session", legacySupport.getSession()); - setVariableValueToObject(mojo, "repoSession", legacySupport.getRepositorySession()); + setVariableValueToObject(mojo, "session", mavenSession); + setVariableValueToObject(mojo, "repoSession", repositorySession); setVariableValueToObject(mojo, "reactorProjects", reactorProjects); setVariableValueToObject( mojo, "remoteProjectRepositories", mojo.getProject().getRemoteProjectRepositories());