diff --git a/src/main/java/org/apache/maven/plugins/dependency/AbstractDependencyMojo.java b/src/main/java/org/apache/maven/plugins/dependency/AbstractDependencyMojo.java index 2f7a2ce2b..07df9f631 100644 --- a/src/main/java/org/apache/maven/plugins/dependency/AbstractDependencyMojo.java +++ b/src/main/java/org/apache/maven/plugins/dependency/AbstractDependencyMojo.java @@ -90,6 +90,12 @@ public abstract class AbstractDependencyMojo @Parameter( defaultValue = "${project.remoteArtifactRepositories}", readonly = true, required = true ) private List remoteRepositories; + /** + * Remote repositories which will be searched for plugins. + */ + @Parameter( defaultValue = "${project.pluginArtifactRepositories}", readonly = true, required = true ) + private List remotePluginRepositories; + /** * Contains the full list of projects in the reactor. */ @@ -345,11 +351,25 @@ private void silenceUnarchiver( UnArchiver unArchiver ) * repositories, used to resolve artifacts. */ public ProjectBuildingRequest newResolveArtifactProjectBuildingRequest() + { + return newProjectBuildingRequest( remoteRepositories ); + } + + /** + * @return Returns a new ProjectBuildingRequest populated from the current session and the current project remote + * repositories, used to resolve plugins. + */ + protected ProjectBuildingRequest newResolvePluginProjectBuildingRequest() + { + return newProjectBuildingRequest( remotePluginRepositories ); + } + + private ProjectBuildingRequest newProjectBuildingRequest( List repositories ) { ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() ); - buildingRequest.setRemoteRepositories( remoteRepositories ); + buildingRequest.setRemoteRepositories( repositories ); return buildingRequest; } diff --git a/src/main/java/org/apache/maven/plugins/dependency/resolvers/GoOfflineMojo.java b/src/main/java/org/apache/maven/plugins/dependency/resolvers/GoOfflineMojo.java index b12dd6f58..97a70ab29 100644 --- a/src/main/java/org/apache/maven/plugins/dependency/resolvers/GoOfflineMojo.java +++ b/src/main/java/org/apache/maven/plugins/dependency/resolvers/GoOfflineMojo.java @@ -20,11 +20,11 @@ */ import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.model.Dependency; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.dependency.utils.DependencyUtil; import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter; import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter; @@ -49,7 +49,6 @@ public class GoOfflineMojo extends AbstractResolveMojo { - /** * Main entry into mojo. Gets the list of dependencies, resolves all that are not in the Reactor, and iterates * through displaying the resolved versions. @@ -101,25 +100,32 @@ protected Set resolveDependencyArtifacts() { final Collection dependencies = getProject().getDependencies(); final Set dependableCoordinates = new HashSet<>(); - final ProjectBuildingRequest buildingRequest = - new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() ); + + final ProjectBuildingRequest buildingRequest = newResolveArtifactProjectBuildingRequest(); for ( Dependency dependency : dependencies ) { dependableCoordinates.add( createDependendableCoordinateFromDependency( dependency ) ); } - return resolveDependableCoordinate( buildingRequest, dependableCoordinates ); + return resolveDependableCoordinate( buildingRequest, dependableCoordinates, "dependencies" ); } private Set resolveDependableCoordinate( final ProjectBuildingRequest buildingRequest, - final Collection dependableCoordinates ) + final Collection dependableCoordinates, + final String type ) throws DependencyResolverException { final TransformableFilter filter = getTransformableFilter(); final Set results = new HashSet<>(); + this.getLog().debug( "Resolving " + type + " with following repositories:" ); + for ( ArtifactRepository repo : buildingRequest.getRemoteRepositories() ) + { + getLog().debug( "#" + repo.getId() + " (" + repo.getUrl() + ")" ); + } + for ( DependableCoordinate dependableCoordinate : dependableCoordinates ) { final Iterable artifactResults = getDependencyResolver().resolveDependencies( @@ -164,15 +170,14 @@ protected Set resolvePluginArtifacts() artifacts.addAll( reports ); artifacts.addAll( plugins ); - final ProjectBuildingRequest buildingRequest = - new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() ); + final ProjectBuildingRequest buildingRequest = newResolvePluginProjectBuildingRequest(); for ( Artifact artifact : artifacts ) { dependableCoordinates.add( createDependendableCoordinateFromArtifact( artifact ) ); } - return resolveDependableCoordinate( buildingRequest, dependableCoordinates ); + return resolveDependableCoordinate( buildingRequest, dependableCoordinates, "plugins" ); } private DependableCoordinate createDependendableCoordinateFromArtifact( final Artifact artifact ) diff --git a/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolvePluginsMojo.java b/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolvePluginsMojo.java index 33f774bac..0f45e90f3 100644 --- a/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolvePluginsMojo.java +++ b/src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolvePluginsMojo.java @@ -21,17 +21,13 @@ import java.io.IOException; import java.util.LinkedHashSet; -import java.util.List; import java.util.Set; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.dependency.utils.DependencyUtil; -import org.apache.maven.project.DefaultProjectBuildingRequest; import org.apache.maven.project.ProjectBuildingRequest; import org.apache.maven.shared.artifact.filter.collection.ArtifactFilterException; import org.apache.maven.shared.artifact.filter.collection.ArtifactsFilter; @@ -51,12 +47,6 @@ public class ResolvePluginsMojo extends AbstractResolveMojo { - /** - * Remote repositories which will be searched for plugins. - */ - @Parameter( defaultValue = "${project.pluginArtifactRepositories}", readonly = true, required = true ) - private List remotePluginRepositories; - /** * Main entry into mojo. Gets the list of dependencies and iterates through displaying the resolved version. * @@ -194,10 +184,7 @@ protected Set resolvePluginArtifacts() // continue; // } - ProjectBuildingRequest buildingRequest = - new DefaultProjectBuildingRequest( session.getProjectBuildingRequest() ); - - buildingRequest.setRemoteRepositories( this.remotePluginRepositories ); + ProjectBuildingRequest buildingRequest = newResolvePluginProjectBuildingRequest(); // resolve the new artifact resolvedArtifacts.add( getArtifactResolver().resolveArtifact( buildingRequest, artifact ).getArtifact() ); diff --git a/src/test/java/org/apache/maven/plugins/dependency/AbstractDependencyMojoTest.java b/src/test/java/org/apache/maven/plugins/dependency/AbstractDependencyMojoTest.java new file mode 100644 index 000000000..97f54ad84 --- /dev/null +++ b/src/test/java/org/apache/maven/plugins/dependency/AbstractDependencyMojoTest.java @@ -0,0 +1,148 @@ +package org.apache.maven.plugins.dependency; + +/* + * 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. + */ + +import junit.framework.TestCase; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.project.ProjectBuildingRequest; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +import static org.apache.maven.plugins.dependency.AbstractDependencyMojoTest.ConcreteDependencyMojo.createConcreteDependencyMojoWithArtifactRepositories; +import static org.apache.maven.plugins.dependency.AbstractDependencyMojoTest.ConcreteDependencyMojo.createConcreteDependencyMojoWithPluginRepositories; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class AbstractDependencyMojoTest extends TestCase +{ + private MavenSession session = mock( MavenSession.class ); + + private ProjectBuildingRequest buildingRequest = mock( ProjectBuildingRequest.class ); + + private ArrayList artifactRepos = new ArrayList<>(); + + private ArrayList pluginRepos = new ArrayList<>(); + + static class ConcreteDependencyMojo extends AbstractDependencyMojo + { + static ConcreteDependencyMojo createConcreteDependencyMojoWithArtifactRepositories( + MavenSession mavenSession, List artifactRepos ) + throws NoSuchFieldException, IllegalAccessException + { + ConcreteDependencyMojo cdm = new ConcreteDependencyMojo(); + cdm.session = mavenSession; + + Field par = AbstractDependencyMojo.class.getDeclaredField( "remoteRepositories" ); + par.setAccessible( true ); + par.set( cdm, artifactRepos ); + + return cdm; + } + + static ConcreteDependencyMojo createConcreteDependencyMojoWithPluginRepositories( + MavenSession mavenSession, List pluginRepos ) + throws NoSuchFieldException, IllegalAccessException + { + ConcreteDependencyMojo cdm = new ConcreteDependencyMojo(); + cdm.session = mavenSession; + + Field par = AbstractDependencyMojo.class.getDeclaredField( "remotePluginRepositories" ); + par.setAccessible( true ); + par.set( cdm, pluginRepos ); + + return cdm; + } + + @Override + protected void doExecute() + { + } + } + + @Override + protected void setUp() throws Exception + { + pluginRepos.add( newRepositoryWithId( "#pr-central" ) ); + pluginRepos.add( newRepositoryWithId( "#pr-plugins" ) ); + + artifactRepos.add( newRepositoryWithId( "#ar-central" ) ); + artifactRepos.add( newRepositoryWithId( "#ar-snapshots" ) ); + artifactRepos.add( newRepositoryWithId( "#ar-staging" ) ); + + when( session.getProjectBuildingRequest() ).thenReturn( buildingRequest ); + } + + private static ArtifactRepository newRepositoryWithId( String id ) + { + ArtifactRepository repo = mock( ArtifactRepository.class ); + when( repo.getId() ).thenReturn( id ); + return repo; + } + + public void testNewResolveArtifactProjectBuildingRequestRemoteRepositoriesSize() + throws NoSuchFieldException, IllegalAccessException + { + AbstractDependencyMojo mojo = createConcreteDependencyMojoWithArtifactRepositories( session, artifactRepos ); + + ProjectBuildingRequest pbr = mojo.newResolveArtifactProjectBuildingRequest(); + List rrepos = pbr.getRemoteRepositories(); + + assertEquals( 3, rrepos.size() ); + } + + public void testNewResolveArtifactProjectBuildingRequestRemoteRepositoriesContents() + throws NoSuchFieldException, IllegalAccessException + { + AbstractDependencyMojo mojo = createConcreteDependencyMojoWithArtifactRepositories( session, artifactRepos ); + + ProjectBuildingRequest pbr = mojo.newResolveArtifactProjectBuildingRequest(); + List rrepos = pbr.getRemoteRepositories(); + + assertEquals( "#ar-central", rrepos.get( 0 ).getId() ); + assertEquals( "#ar-snapshots", rrepos.get( 1 ).getId() ); + assertEquals( "#ar-staging", rrepos.get( 2 ).getId() ); + } + + public void testNewResolvePluginProjectBuildingRequestRemoteRepositoriesSize() + throws NoSuchFieldException, IllegalAccessException + { + AbstractDependencyMojo mojo = createConcreteDependencyMojoWithPluginRepositories( session, pluginRepos ); + + ProjectBuildingRequest pbr = mojo.newResolvePluginProjectBuildingRequest(); + List rrepos = pbr.getRemoteRepositories(); + + assertEquals( 2, rrepos.size() ); + } + + public void testNewResolvePluginProjectBuildingRequestRemoteRepositoriesContents() + throws NoSuchFieldException, IllegalAccessException + { + AbstractDependencyMojo mojo = createConcreteDependencyMojoWithPluginRepositories( session, pluginRepos ); + + ProjectBuildingRequest pbr = mojo.newResolvePluginProjectBuildingRequest(); + List rrepos = pbr.getRemoteRepositories(); + + assertEquals( "#pr-central", rrepos.get( 0 ).getId() ); + assertEquals( "#pr-plugins", rrepos.get( 1 ).getId() ); + } +} \ No newline at end of file