You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2020/05/30 14:24:55 UTC
[maven-dependency-plugin] 01/01: [MDEP-680] dependency:go-offline
does not use repositories from parent pom in reactor build
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch MDEP-680
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git
commit 02d0b28601e0410952b5b4301375cf4ba564f908
Author: Piotrek Żygieło <pz...@users.noreply.github.com>
AuthorDate: Fri May 1 21:29:31 2020 +0200
[MDEP-680] dependency:go-offline does not use repositories from parent pom in reactor build
This closes #46
---
.../plugins/dependency/AbstractDependencyMojo.java | 22 ++-
.../dependency/resolvers/GoOfflineMojo.java | 23 ++--
.../dependency/resolvers/ResolvePluginsMojo.java | 15 +--
.../dependency/AbstractDependencyMojoTest.java | 148 +++++++++++++++++++++
4 files changed, 184 insertions(+), 24 deletions(-)
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 2f7a2ce..07df9f6 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/AbstractDependencyMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/AbstractDependencyMojo.java
@@ -91,6 +91,12 @@ public abstract class AbstractDependencyMojo
private List<ArtifactRepository> remoteRepositories;
/**
+ * Remote repositories which will be searched for plugins.
+ */
+ @Parameter( defaultValue = "${project.pluginArtifactRepositories}", readonly = true, required = true )
+ private List<ArtifactRepository> remotePluginRepositories;
+
+ /**
* Contains the full list of projects in the reactor.
*/
@Parameter( defaultValue = "${reactorProjects}", readonly = true )
@@ -346,10 +352,24 @@ public abstract class AbstractDependencyMojo
*/
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<ArtifactRepository> 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 b12dd6f..e0e8b1f 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 @@ package org.apache.maven.plugins.dependency.resolvers;
*/
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 @@ import java.util.Set;
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 @@ public class GoOfflineMojo
{
final Collection<Dependency> dependencies = getProject().getDependencies();
final Set<DependableCoordinate> 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<Artifact> resolveDependableCoordinate( final ProjectBuildingRequest buildingRequest,
- final Collection<DependableCoordinate> dependableCoordinates )
+ final Collection<DependableCoordinate> dependableCoordinates,
+ final String type )
throws DependencyResolverException
{
final TransformableFilter filter = getTransformableFilter();
final Set<Artifact> 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<ArtifactResult> artifactResults = getDependencyResolver().resolveDependencies(
@@ -164,15 +170,14 @@ public class GoOfflineMojo
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 33f774b..0f45e90 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 @@ package org.apache.maven.plugins.dependency.resolvers;
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;
@@ -52,12 +48,6 @@ public class ResolvePluginsMojo
{
/**
- * Remote repositories which will be searched for plugins.
- */
- @Parameter( defaultValue = "${project.pluginArtifactRepositories}", readonly = true, required = true )
- private List<ArtifactRepository> remotePluginRepositories;
-
- /**
* Main entry into mojo. Gets the list of dependencies and iterates through displaying the resolved version.
*
* @throws MojoExecutionException with a message if an error occurs.
@@ -194,10 +184,7 @@ public class ResolvePluginsMojo
// 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 0000000..861ca47
--- /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<ArtifactRepository> artifactRepos = new ArrayList<>();
+
+ private ArrayList<ArtifactRepository> pluginRepos = new ArrayList<>();
+
+ static class ConcreteDependencyMojo extends AbstractDependencyMojo
+ {
+ static ConcreteDependencyMojo createConcreteDependencyMojoWithArtifactRepositories(
+ MavenSession mavenSession, List<ArtifactRepository> 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<ArtifactRepository> 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<ArtifactRepository> rrepos = pbr.getRemoteRepositories();
+
+ assertEquals( 3, rrepos.size() );
+ }
+
+ public void testNewResolveArtifactProjectBuildingRequestRemoteRepositoriesContents()
+ throws NoSuchFieldException, IllegalAccessException
+ {
+ AbstractDependencyMojo mojo = createConcreteDependencyMojoWithArtifactRepositories( session, artifactRepos );
+
+ ProjectBuildingRequest pbr = mojo.newResolveArtifactProjectBuildingRequest();
+ List<ArtifactRepository> 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<ArtifactRepository> rrepos = pbr.getRemoteRepositories();
+
+ assertEquals( 2, rrepos.size() );
+ }
+
+ public void testNewResolvePluginProjectBuildingRequestRemoteRepositoriesContents()
+ throws NoSuchFieldException, IllegalAccessException
+ {
+ AbstractDependencyMojo mojo = createConcreteDependencyMojoWithPluginRepositories( session, pluginRepos );
+
+ ProjectBuildingRequest pbr = mojo.newResolvePluginProjectBuildingRequest();
+ List<ArtifactRepository> rrepos = pbr.getRemoteRepositories();
+
+ assertEquals( "pr-central", rrepos.get( 0 ).getId() );
+ assertEquals( "pr-plugins", rrepos.get( 1 ).getId() );
+ }
+}
\ No newline at end of file