You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2019/11/10 14:05:26 UTC
[maven-artifact-transfer] 02/02: [MSHARED-801] Add functionality to
collect raw dependencies in Maven 3+
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch MSHARED-801
in repository https://gitbox.apache.org/repos/asf/maven-artifact-transfer.git
commit c3edb9582d171e2c2c149d8551f61b30c9e1168b
Author: rfscholte <rf...@apache.org>
AuthorDate: Sun Nov 10 15:05:12 2019 +0100
[MSHARED-801] Add functionality to collect raw dependencies in Maven 3+
---
.../collector/DependencyCollectorMojo.java | 2 +-
.../dependencies/collect/DependencyCollector.java | 26 +++-
.../internal/DefaultDependencyCollector.java | 46 ++++--
.../collect/internal/Maven30ConflictIdSorter.java | 4 +-
.../collect/internal/Maven30ConflictResolver.java | 31 ++--
.../internal/Maven30DependencyCollector.java | 166 +++++++++++----------
.../Maven30DirectScopeDependencySelector.java | 32 ++--
.../collect/internal/Maven30JavaScopeDeriver.java | 2 +-
.../collect/internal/Maven30JavaScopeSelector.java | 2 +-
.../internal/Maven30NearestVersionSelector.java | 5 +-
.../collect/internal/Maven30NodeData.java | 7 +-
.../Maven30PathRecordingDependencyVisitor.java | 8 +-
.../internal/Maven30SimpleOptionalitySelector.java | 2 +-
.../collect/internal/Maven30Stack.java | 2 +-
.../internal/Maven31DependencyCollector.java | 145 +++++++++---------
.../Maven31DirectScopeDependencySelector.java | 30 ++--
.../collect/internal/MavenDependencyCollector.java | 9 +-
17 files changed, 283 insertions(+), 236 deletions(-)
diff --git a/src/it/maven-dependency-collector-plugin/src/main/java/org/apache/maven/plugin/dependency/collector/DependencyCollectorMojo.java b/src/it/maven-dependency-collector-plugin/src/main/java/org/apache/maven/plugin/dependency/collector/DependencyCollectorMojo.java
index 45ab470..5907511 100644
--- a/src/it/maven-dependency-collector-plugin/src/main/java/org/apache/maven/plugin/dependency/collector/DependencyCollectorMojo.java
+++ b/src/it/maven-dependency-collector-plugin/src/main/java/org/apache/maven/plugin/dependency/collector/DependencyCollectorMojo.java
@@ -92,7 +92,7 @@ public class DependencyCollectorMojo
{
try
{
- CollectorResult result = dependencyCollector.collectDependenciesGraph( buildingRequest );
+ CollectorResult result = dependencyCollector.collectDependenciesGraph( buildingRequest, project.getModel() );
DependencyNode root = result.getDependencyGraphRoot();
StringWriter writer = new StringWriter();
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
index 700d66c..325855a 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/DependencyCollector.java
@@ -72,12 +72,36 @@ public interface DependencyCollector
/**
* @param buildingRequest {@link ProjectBuildingRequest}.
+ * @param root {@link Dependency}
+ * @return {@link CollectorResult}
+ * @throws DependencyCollectorException in case of an error which can be a component lookup error or an error while
+ * trying to collect the dependencies.
+ * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code>
+ */
+ CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest, Dependency root )
+ throws DependencyCollectorException;
+
+ /**
+ * @param buildingRequest {@link ProjectBuildingRequest}.
+ * @param root {@link DependableCoordinate}
+ * @return {@link CollectorResult}
+ * @throws DependencyCollectorException in case of an error which can be a component lookup error or an error while
+ * trying to collect the dependencies.
+ * @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code>
+ */
+ CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
+ throws DependencyCollectorException;
+
+ /**
+ * @param buildingRequest {@link ProjectBuildingRequest}.
+ * @param root {@link Model}
* @return {@link CollectorResult}
* @throws DependencyCollectorException in case of an error which can be a component lookup error or an error while
* trying to collect the dependencies.
* @throws IllegalArgumentException in case of parameter <code>buildingRequest</code> is <code>null</code>
*/
- CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest )
+ CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest, Model root )
throws DependencyCollectorException;
+
}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
index 90548c3..c239839 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/DefaultDependencyCollector.java
@@ -56,11 +56,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
try
{
- String hint = isMaven31() ? "maven31" : "maven3";
-
- DependencyCollector effectiveDependencyCollector = container.lookup( DependencyCollector.class, hint );
-
- return effectiveDependencyCollector.collectDependencies( buildingRequest, root );
+ return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
}
catch ( ComponentLookupException e )
{
@@ -92,11 +88,7 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
try
{
- String hint = isMaven31() ? "maven31" : "maven3";
-
- DependencyCollector effectiveDependencyCollector = container.lookup( DependencyCollector.class, hint );
-
- return effectiveDependencyCollector.collectDependencies( buildingRequest, root );
+ return getMavenDependencyCollector( buildingRequest ).collectDependencies( root );
}
catch ( ComponentLookupException e )
{
@@ -105,13 +97,43 @@ class DefaultDependencyCollector implements DependencyCollector, Contextualizabl
}
@Override
- public CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest )
+ public CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest, Model root )
+ throws DependencyCollectorException
+ {
+ validateBuildingRequest( buildingRequest );
+ try
+ {
+ return getMavenDependencyCollector( buildingRequest ).collectDependenciesGraph( root );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+
+ @Override
+ public CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
+ throws DependencyCollectorException
+ {
+ validateBuildingRequest( buildingRequest );
+ try
+ {
+ return getMavenDependencyCollector( buildingRequest ).collectDependenciesGraph( root );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+
+ @Override
+ public CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest, Dependency root )
throws DependencyCollectorException
{
validateBuildingRequest( buildingRequest );
try
{
- return getMavenDependencyCollector( buildingRequest ).collectDependenciesGraph( buildingRequest );
+ return getMavenDependencyCollector( buildingRequest ).collectDependenciesGraph( root );
}
catch ( ComponentLookupException e )
{
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ConflictIdSorter.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ConflictIdSorter.java
index f8ea6de..71654d2 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ConflictIdSorter.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ConflictIdSorter.java
@@ -41,10 +41,10 @@ import org.sonatype.aether.util.graph.transformer.TransformationContextKeys;
*
* @author Gabriel Belingueres
*/
-public class Maven30ConflictIdSorter
+class Maven30ConflictIdSorter
implements DependencyGraphTransformer
{
-
+ @Override
public DependencyNode transformGraph( DependencyNode node, DependencyGraphTransformationContext context )
throws RepositoryException
{
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ConflictResolver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ConflictResolver.java
index 4ac601a..8782232 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ConflictResolver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30ConflictResolver.java
@@ -47,7 +47,7 @@ import org.sonatype.aether.util.graph.transformer.TransformationContextKeys;
*
* @author Gabriel Belingueres
*/
-public class Maven30ConflictResolver
+class Maven30ConflictResolver
implements DependencyGraphTransformer
{
@@ -104,7 +104,7 @@ public class Maven30ConflictResolver
* @param nodeData the object where to save node data since Sonatype Aether 1.7 does not have that info inside the
* DependencyNode.
*/
- public Maven30ConflictResolver( VersionSelector versionSelector, ScopeSelector scopeSelector,
+ Maven30ConflictResolver( VersionSelector versionSelector, ScopeSelector scopeSelector,
OptionalitySelector optionalitySelector, ScopeDeriver scopeDeriver,
Maven30NodeData nodeData )
{
@@ -131,6 +131,7 @@ public class Maven30ConflictResolver
this.nodeData = nodeData;
}
+ @Override
public DependencyNode transformGraph( DependencyNode node, DependencyGraphTransformationContext context )
throws RepositoryException
{
@@ -161,7 +162,7 @@ public class Maven30ConflictResolver
throw new RepositoryException( "conflict groups have not been identified" );
}
- Map<Object, Collection<Object>> cyclicPredecessors = new HashMap<Object, Collection<Object>>();
+ Map<Object, Collection<Object>> cyclicPredecessors = new HashMap<>();
for ( Collection<?> cycle : conflictIdCycles )
{
for ( Object conflictId : cycle )
@@ -304,11 +305,7 @@ public class Maven30ConflictResolver
nodeData.putData( loser, NODE_DATA_WINNER, winner.node );
nodeData.putData( loser, NODE_DATA_ORIGINAL_SCOPE, loser.getDependency().getScope() );
nodeData.putData( loser, NODE_DATA_ORIGINAL_OPTIONALITY, loser.getDependency().isOptional() );
-// loser.setData( NODE_DATA_WINNER, winner.node );
-// loser.setData( NODE_DATA_ORIGINAL_SCOPE, loser.getDependency().getScope() );
-// loser.setData( NODE_DATA_ORIGINAL_OPTIONALITY, loser.getDependency().isOptional() );
loser.setScope( item.getScopes().iterator().next() );
-// loser.setChildren( Collections.<DependencyNode>emptyList() );
childIt.set( loser );
}
else
@@ -778,7 +775,7 @@ public class Maven30ConflictResolver
* @noinstantiate This class is not intended to be instantiated by clients in production code, the constructor may
* change without notice and only exists to enable unit testing.
*/
- public static final class ScopeContext
+ static final class ScopeContext
{
String parentScope;
@@ -795,7 +792,7 @@ public class Maven30ConflictResolver
* @noreference This class is not intended to be instantiated by clients in production code, the constructor may
* change without notice and only exists to enable unit testing.
*/
- public ScopeContext( String parentScope, String childScope )
+ ScopeContext( String parentScope, String childScope )
{
this.parentScope = ( parentScope != null ) ? parentScope : "";
derivedScope = ( childScope != null ) ? childScope : "";
@@ -853,7 +850,7 @@ public class Maven30ConflictResolver
* @noinstantiate This class is not intended to be instantiated by clients in production code, the constructor may
* change without notice and only exists to enable unit testing.
*/
- public static final class ConflictItem
+ static final class ConflictItem
{
// nodes can share child lists, we care about the unique owner of a child node which is the child list
@@ -913,7 +910,7 @@ public class Maven30ConflictResolver
* @noreference This class is not intended to be instantiated by clients in production code, the constructor may
* change without notice and only exists to enable unit testing.
*/
- public ConflictItem( DependencyNode parent, DependencyNode node, int depth, int optionalities,
+ ConflictItem( DependencyNode parent, DependencyNode node, int depth, int optionalities,
String... scopes )
{
this.parent = ( parent != null ) ? parent.getChildren() : null;
@@ -1035,7 +1032,7 @@ public class Maven30ConflictResolver
* @noinstantiate This class is not intended to be instantiated by clients in production code, the constructor may
* change without notice and only exists to enable unit testing.
*/
- public static final class ConflictContext
+ static final class ConflictContext
{
final DependencyNode root;
@@ -1070,7 +1067,7 @@ public class Maven30ConflictResolver
* @noreference This class is not intended to be instantiated by clients in production code, the constructor may
* change without notice and only exists to enable unit testing.
*/
- public ConflictContext( DependencyNode root, Object conflictId, Map<DependencyNode, Object> conflictIds,
+ ConflictContext( DependencyNode root, Object conflictId, Map<DependencyNode, Object> conflictIds,
Collection<ConflictItem> items )
{
this( root, conflictIds, items );
@@ -1182,7 +1179,7 @@ public class Maven30ConflictResolver
* version selector does not need to deal with potential scope conflicts, these will be addressed afterwards by the
* {@link ScopeSelector}. Implementations must be stateless.
*/
- public abstract static class VersionSelector
+ abstract static class VersionSelector
{
/**
@@ -1224,7 +1221,7 @@ public class Maven30ConflictResolver
* potentially conflicting set of {@link ScopeDeriver derived scopes}. The scope selector gets invoked after the
* {@link VersionSelector} has picked the winning node. Implementations must be stateless.
*/
- public abstract static class ScopeSelector
+ abstract static class ScopeSelector
{
/**
@@ -1265,7 +1262,7 @@ public class Maven30ConflictResolver
* An extension point of {@link ConflictResolver} that determines the scope of a dependency in relation to the scope
* of its parent. Implementations must be stateless.
*/
- public abstract static class ScopeDeriver
+ abstract static class ScopeDeriver
{
/**
@@ -1306,7 +1303,7 @@ public class Maven30ConflictResolver
* potentially conflicting set of derived optionalities. The optionality selector gets invoked after the
* {@link VersionSelector} has picked the winning node. Implementations must be stateless.
*/
- public abstract static class OptionalitySelector
+ abstract static class OptionalitySelector
{
/**
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
index a52c065..7ef51a3 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DependencyCollector.java
@@ -25,10 +25,7 @@ import java.util.List;
import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.model.Model;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
@@ -152,95 +149,78 @@ class Maven30DependencyCollector
}
@Override
- public CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest )
+ public CollectorResult collectDependenciesGraph( org.apache.maven.model.Dependency root )
throws DependencyCollectorException
{
- try
- {
- MavenProject project = buildingRequest.getProject();
-
- org.apache.maven.artifact.Artifact projectArtifact = project.getArtifact();
- List<ArtifactRepository> remoteArtifactRepositories = project.getRemoteArtifactRepositories();
-
- RepositorySystemSession repositorySystemSession = buildingRequest.getRepositorySession();
-
- DefaultRepositorySystemSession session = new DefaultRepositorySystemSession( repositorySystemSession );
-
- DependencyGraphTransformer transformer =
- new Maven30ConflictResolver( new Maven30NearestVersionSelector(), new Maven30JavaScopeSelector(),
- new Maven30SimpleOptionalitySelector(), new Maven30JavaScopeDeriver(),
- new Maven30NodeData() );
- session.setDependencyGraphTransformer( transformer );
-
- DependencySelector depFilter =
- new AndDependencySelector( new Maven30DirectScopeDependencySelector( JavaScopes.TEST ),
- new OptionalDependencySelector(), new ExclusionDependencySelector() );
- session.setDependencySelector( depFilter );
-
- session.setConfigProperty( Maven30ConflictResolver.CONFIG_PROP_VERBOSE, true );
- session.setConfigProperty( "aether.dependencyManager.verbose", true );
-
- Artifact aetherArtifact =
- (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
- org.apache.maven.artifact.Artifact.class, projectArtifact );
-
- @SuppressWarnings( "unchecked" )
- List<RemoteRepository> aetherRepos =
- (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
- remoteArtifactRepositories );
-
- CollectRequest collectRequest = new CollectRequest();
- collectRequest.setRoot( new Dependency( aetherArtifact, "" ) );
- collectRequest.setRepositories( aetherRepos );
-
- ArtifactTypeRegistry stereotypes = session.getArtifactTypeRegistry();
- collectDependencyList( collectRequest, project, stereotypes );
- collectManagedDependencyList( collectRequest, project, stereotypes );
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
- CollectResult collectResult = repositorySystem.collectDependencies( session, collectRequest );
+ CollectRequest request = new CollectRequest();
+ request.setRoot( toDependency( root, typeRegistry ) );
- return new Maven30CollectorResult( collectResult );
+ return collectDependenciesGraph( request );
+ }
+
+ @Override
+ public CollectorResult collectDependenciesGraph( DependableCoordinate root )
+ throws DependencyCollectorException
+ {
+ ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
+
+ String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+ Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
+ extension, root.getVersion() );
+
+ CollectRequest request = new CollectRequest();
+ request.setRoot( new Dependency( aetherArtifact, null ) );
-// DependencyNode rootNode = collectResult.getRoot();
+ return collectDependenciesGraph( request );
+ }
+
+ @Override
+ public CollectorResult collectDependenciesGraph( Model root )
+ throws DependencyCollectorException
+ {
+ // Are there examples where packaging and type are NOT in sync
+ ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
+
+ String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+ Artifact aetherArtifact =
+ new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );
+
+ CollectRequest request = new CollectRequest();
+ request.setRoot( new Dependency( aetherArtifact, null ) );
-// if ( getLogger().isDebugEnabled() )
-// {
-// logTree( rootNode );
-// }
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
-// return buildDependencyNode( null, rootNode, projectArtifact, filter );
- }
- catch ( DependencyCollectionException e )
+ List<Dependency> aetherDependencies = new ArrayList<Dependency>( root.getDependencies().size() );
+ for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
{
- throw new DependencyCollectorException( "Could not collect dependencies: " + e.getResult(), e );
+ aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
}
- }
+ request.setDependencies( aetherDependencies );
- private void collectManagedDependencyList( CollectRequest collectRequest, MavenProject project,
- ArtifactTypeRegistry typeRegistry )
- throws DependencyCollectorException
- {
- if ( project.getDependencyManagement() != null )
+ if ( root.getDependencyManagement() != null )
{
- for ( org.apache.maven.model.Dependency dependency : project.getDependencyManagement().getDependencies() )
+ List<Dependency> aetherManagerDependencies =
+ new ArrayList<Dependency>( root.getDependencyManagement().getDependencies().size() );
+
+ for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
{
- Dependency aetherDep = toDependency( dependency, typeRegistry );
- collectRequest.addManagedDependency( aetherDep );
+ aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
}
+
+ request.setManagedDependencies( aetherManagerDependencies );
}
+
+ return collectDependenciesGraph( request );
}
-
- private void collectDependencyList( CollectRequest collectRequest, MavenProject project,
- ArtifactTypeRegistry typeRegistry )
- throws DependencyCollectorException
- {
- for ( org.apache.maven.model.Dependency dependency : project.getDependencies() )
- {
- Dependency aetherDep = toDependency( dependency, typeRegistry );
- collectRequest.addDependency( aetherDep );
- }
- }
-
+
private CollectorResult collectDependencies( CollectRequest request )
throws DependencyCollectorException
{
@@ -255,6 +235,38 @@ class Maven30DependencyCollector
throw new DependencyCollectorException( e.getMessage(), e );
}
}
+
+ private CollectorResult collectDependenciesGraph( CollectRequest request )
+ throws DependencyCollectorException
+ {
+ DefaultRepositorySystemSession session = new DefaultRepositorySystemSession( this.session );
+ try
+ {
+ DependencyGraphTransformer transformer =
+ new Maven30ConflictResolver( new Maven30NearestVersionSelector(), new Maven30JavaScopeSelector(),
+ new Maven30SimpleOptionalitySelector(), new Maven30JavaScopeDeriver(),
+ new Maven30NodeData() );
+ session.setDependencyGraphTransformer( transformer );
+
+ DependencySelector depFilter =
+ new AndDependencySelector( new Maven30DirectScopeDependencySelector( JavaScopes.TEST ),
+ new OptionalDependencySelector(), new ExclusionDependencySelector() );
+ session.setDependencySelector( depFilter );
+
+ session.setConfigProperty( Maven30ConflictResolver.CONFIG_PROP_VERBOSE, true );
+ session.setConfigProperty( "aether.dependencyManager.verbose", true );
+
+ request.setRepositories( aetherRepositories );
+
+ CollectResult collectResult = repositorySystem.collectDependencies( session, request );
+
+ return new Maven30CollectorResult( collectResult );
+ }
+ catch ( DependencyCollectionException e )
+ {
+ throw new DependencyCollectorException( "Could not collect dependencies: " + e.getResult(), e );
+ }
+ }
private static Dependency toDependency( org.apache.maven.model.Dependency mavenDependency,
ArtifactTypeRegistry typeRegistry )
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DirectScopeDependencySelector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DirectScopeDependencySelector.java
index debc778..116fa75 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DirectScopeDependencySelector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30DirectScopeDependencySelector.java
@@ -19,6 +19,8 @@ package org.apache.maven.shared.transfer.dependencies.collect.internal;
* under the License.
*/
+import java.util.Objects;
+
import org.sonatype.aether.collection.DependencyCollectionContext;
import org.sonatype.aether.collection.DependencySelector;
import org.sonatype.aether.graph.Dependency;
@@ -30,27 +32,26 @@ import org.sonatype.aether.graph.Dependency;
* @see {@link Dependency#getScope()}
* @author Gabriel Belingueres
*/
-public class Maven30DirectScopeDependencySelector
+class Maven30DirectScopeDependencySelector
implements DependencySelector
{
private final String scope;
private final int depth;
+
+ private final int hashCode;
- public Maven30DirectScopeDependencySelector( String scope )
+ Maven30DirectScopeDependencySelector( String scope )
{
this( scope, 0 );
}
- private Maven30DirectScopeDependencySelector( String scope, int depth )
+ Maven30DirectScopeDependencySelector( String scope, int depth )
{
- if ( scope == null )
- {
- throw new IllegalArgumentException( "scope is null!" );
- }
- this.scope = scope;
+ this.scope = Objects.requireNonNull( scope, "scope is null!" );
this.depth = depth;
+ this.hashCode = Objects.hash( depth, scope );
}
/**
@@ -87,11 +88,7 @@ public class Maven30DirectScopeDependencySelector
@Override
public int hashCode()
{
- final int prime = 31;
- int result = 1;
- result = prime * result + depth;
- result = prime * result + ( ( scope == null ) ? 0 : scope.hashCode() );
- return result;
+ return hashCode;
}
@Override
@@ -114,14 +111,7 @@ public class Maven30DirectScopeDependencySelector
{
return false;
}
- if ( scope == null )
- {
- if ( other.scope != null )
- {
- return false;
- }
- }
- else if ( !scope.equals( other.scope ) )
+ if ( !Objects.equals( scope, other.scope ) )
{
return false;
}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30JavaScopeDeriver.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30JavaScopeDeriver.java
index 70dc35d..aefaa5e 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30JavaScopeDeriver.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30JavaScopeDeriver.java
@@ -29,7 +29,7 @@ import org.sonatype.aether.util.artifact.JavaScopes;
*
* @author Gabriel Belingueres
*/
-public class Maven30JavaScopeDeriver
+class Maven30JavaScopeDeriver
extends ScopeDeriver
{
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30JavaScopeSelector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30JavaScopeSelector.java
index f569d40..7e2ecea 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30JavaScopeSelector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30JavaScopeSelector.java
@@ -34,7 +34,7 @@ import org.sonatype.aether.util.artifact.JavaScopes;
*
* @author Gabriel Belingueres
*/
-public class Maven30JavaScopeSelector
+class Maven30JavaScopeSelector
extends ScopeSelector
{
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30NearestVersionSelector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30NearestVersionSelector.java
index c913c54..3fc3400 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30NearestVersionSelector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30NearestVersionSelector.java
@@ -40,7 +40,7 @@ import org.sonatype.aether.version.VersionConstraint;
*
* @author Gabriel Belingueres
*/
-public class Maven30NearestVersionSelector
+class Maven30NearestVersionSelector
extends VersionSelector
{
@@ -56,7 +56,6 @@ public class Maven30NearestVersionSelector
boolean backtrack = false;
boolean hardConstraint = !constraint.getRanges().isEmpty();
-// boolean hardConstraint = constraint.getRange() != null;
if ( hardConstraint )
{
@@ -151,8 +150,6 @@ public class Maven30NearestVersionSelector
Maven30PathRecordingDependencyVisitor visitor = new Maven30PathRecordingDependencyVisitor( filter );
context.getRoot().accept( visitor );
return new UnsolvableVersionConflictException( visitor.getPaths(), null );
-// return new UnsolvableVersionConflictException( visitor.getPaths(), context.conflictId );
-// return new UnsolvableVersionConflictException( visitor.getPaths() );
}
static final class ConflictGroup
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30NodeData.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30NodeData.java
index d22f232..87d21e2 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30NodeData.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30NodeData.java
@@ -31,11 +31,10 @@ import org.sonatype.aether.graph.DependencyNode;
*
* @author Gabriel Belingueres
*/
-public class Maven30NodeData
+class Maven30NodeData
{
- private IdentityHashMap<DependencyNode, Map<Object, Object>> nodeMap =
- new IdentityHashMap<DependencyNode, Map<Object, Object>>();
+ private IdentityHashMap<DependencyNode, Map<Object, Object>> nodeMap = new IdentityHashMap<>();
public void putData( DependencyNode node, Object key, Object value )
{
@@ -81,7 +80,7 @@ public class Maven30NodeData
{
if ( data.isEmpty() )
{
- data = new HashMap<Object, Object>();
+ data = new HashMap<>();
}
data.put( key, value );
}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30PathRecordingDependencyVisitor.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30PathRecordingDependencyVisitor.java
index 59f98ec..3d5e9fe 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30PathRecordingDependencyVisitor.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30PathRecordingDependencyVisitor.java
@@ -32,7 +32,7 @@ import org.sonatype.aether.graph.DependencyVisitor;
*
* @author Gabriel Belingueres
*/
-public class Maven30PathRecordingDependencyVisitor
+class Maven30PathRecordingDependencyVisitor
implements DependencyVisitor
{
@@ -50,7 +50,7 @@ public class Maven30PathRecordingDependencyVisitor
*
* @param filter The filter used to select terminal nodes of paths to record, may be {@code null} to match any node.
*/
- public Maven30PathRecordingDependencyVisitor( DependencyFilter filter )
+ Maven30PathRecordingDependencyVisitor( DependencyFilter filter )
{
this( filter, true );
}
@@ -64,7 +64,7 @@ public class Maven30PathRecordingDependencyVisitor
* node. If {@code true}, all recorded paths will have only one matching node (namely the terminal node),
* if {@code false} a recorded path can consist of multiple matching nodes.
*/
- public Maven30PathRecordingDependencyVisitor( DependencyFilter filter, boolean excludeChildrenOfMatches )
+ Maven30PathRecordingDependencyVisitor( DependencyFilter filter, boolean excludeChildrenOfMatches )
{
this.filter = filter;
this.excludeChildrenOfMatches = excludeChildrenOfMatches;
@@ -94,6 +94,7 @@ public class Maven30PathRecordingDependencyVisitor
return paths;
}
+ @Override
public boolean visitEnter( DependencyNode node )
{
boolean accept = filter == null || filter.accept( node, parents );
@@ -115,6 +116,7 @@ public class Maven30PathRecordingDependencyVisitor
return !( excludeChildrenOfMatches && accept );
}
+ @Override
public boolean visitLeave( DependencyNode node )
{
parents.pop();
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30SimpleOptionalitySelector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30SimpleOptionalitySelector.java
index 4335628..e2a01c2 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30SimpleOptionalitySelector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30SimpleOptionalitySelector.java
@@ -31,7 +31,7 @@ import org.sonatype.aether.RepositoryException;
*
* @author Gabriel Belingueres
*/
-public class Maven30SimpleOptionalitySelector
+class Maven30SimpleOptionalitySelector
extends OptionalitySelector
{
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30Stack.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30Stack.java
index e15373c..95a6ead 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30Stack.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven30Stack.java
@@ -29,7 +29,7 @@ import java.util.RandomAccess;
* @param <E> the type of the elements of the stack.
* @author Gabriel Belingueres
*/
-public class Maven30Stack<E>
+class Maven30Stack<E>
extends AbstractList<E>
implements RandomAccess
{
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
index e557a1e..1f0b0a9 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DependencyCollector.java
@@ -25,10 +25,7 @@ import java.util.List;
import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.model.Model;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
@@ -156,6 +153,79 @@ class Maven31DependencyCollector
return collectDependencies( request );
}
+
+ @Override
+ public CollectorResult collectDependenciesGraph( org.apache.maven.model.Dependency root )
+ throws DependencyCollectorException
+ {
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+
+ CollectRequest request = new CollectRequest();
+ request.setRoot( toDependency( root, typeRegistry ) );
+
+ return collectDependenciesGraph( request );
+ }
+
+ @Override
+ public CollectorResult collectDependenciesGraph( DependableCoordinate root )
+ throws DependencyCollectorException
+ {
+ ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
+
+ String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+ Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
+ extension, root.getVersion() );
+
+ CollectRequest request = new CollectRequest();
+ request.setRoot( new Dependency( aetherArtifact, null ) );
+
+ return collectDependenciesGraph( request );
+ }
+
+ @Override
+ public CollectorResult collectDependenciesGraph( Model root )
+ throws DependencyCollectorException
+ {
+ // Are there examples where packaging and type are NOT in sync
+ ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
+
+ String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
+
+ Artifact aetherArtifact =
+ new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );
+
+ CollectRequest request = new CollectRequest();
+ request.setRoot( new Dependency( aetherArtifact, null ) );
+
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+
+ List<Dependency> aetherDependencies = new ArrayList<Dependency>( root.getDependencies().size() );
+ for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
+ {
+ aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+ }
+ request.setDependencies( aetherDependencies );
+
+ if ( root.getDependencyManagement() != null )
+ {
+ List<Dependency> aetherManagerDependencies =
+ new ArrayList<Dependency>( root.getDependencyManagement().getDependencies().size() );
+
+ for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
+ {
+ aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
+ }
+
+ request.setManagedDependencies( aetherManagerDependencies );
+ }
+
+ return collectDependenciesGraph( request );
+ }
private CollectorResult collectDependencies( CollectRequest request )
throws DependencyCollectorException
@@ -172,23 +242,12 @@ class Maven31DependencyCollector
}
}
- @Override
- public CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest )
+ private CollectorResult collectDependenciesGraph( CollectRequest request )
throws DependencyCollectorException
{
- DefaultRepositorySystemSession session = null;
+ DefaultRepositorySystemSession session = new DefaultRepositorySystemSession( this.session );
try
{
- MavenProject project = buildingRequest.getProject();
-
- org.apache.maven.artifact.Artifact projectArtifact = project.getArtifact();
- List<ArtifactRepository> remoteArtifactRepositories = project.getRemoteArtifactRepositories();
-
- DefaultRepositorySystemSession repositorySession =
- (DefaultRepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
-
- session = new DefaultRepositorySystemSession( repositorySession );
-
DependencyGraphTransformer transformer =
new ConflictResolver( new NearestVersionSelector(), new JavaScopeSelector(),
new SimpleOptionalitySelector(), new JavaScopeDeriver() );
@@ -202,36 +261,11 @@ class Maven31DependencyCollector
session.setConfigProperty( ConflictResolver.CONFIG_PROP_VERBOSE, true );
session.setConfigProperty( DependencyManagerUtils.CONFIG_PROP_VERBOSE, true );
- Artifact aetherArtifact =
- (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
- org.apache.maven.artifact.Artifact.class, projectArtifact );
-
- @SuppressWarnings( "unchecked" )
- List<org.eclipse.aether.repository.RemoteRepository> aetherRepos =
- (List<org.eclipse.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos",
- List.class,
- remoteArtifactRepositories );
-
- CollectRequest collectRequest = new CollectRequest();
- collectRequest.setRoot( new org.eclipse.aether.graph.Dependency( aetherArtifact, "" ) );
- collectRequest.setRepositories( aetherRepos );
-
- org.eclipse.aether.artifact.ArtifactTypeRegistry stereotypes = session.getArtifactTypeRegistry();
- collectDependencyList( collectRequest, project, stereotypes );
- collectManagedDependencyList( collectRequest, project, stereotypes );
+ request.setRepositories( aetherRepositories );
- CollectResult collectResult = repositorySystem.collectDependencies( session, collectRequest );
+ CollectResult collectResult = repositorySystem.collectDependencies( session, request );
return new Maven31CollectorResult( collectResult );
-
-// org.eclipse.aether.graph.DependencyNode rootNode = collectResult.getRoot();
-
-// if ( getLogger().isDebugEnabled() )
-// {
-// logTree( rootNode );
-// }
-
-// return buildDependencyNode( null, rootNode, projectArtifact, filter );
}
catch ( DependencyCollectionException e )
{
@@ -246,31 +280,6 @@ class Maven31DependencyCollector
}
}
- private void collectManagedDependencyList( CollectRequest collectRequest, MavenProject project,
- ArtifactTypeRegistry typeRegistry )
- throws DependencyCollectorException
- {
- if ( project.getDependencyManagement() != null )
- {
- for ( org.apache.maven.model.Dependency dependency : project.getDependencyManagement().getDependencies() )
- {
- Dependency aetherDep = toDependency( dependency, typeRegistry );
- collectRequest.addManagedDependency( aetherDep );
- }
- }
- }
-
- private void collectDependencyList( CollectRequest collectRequest, MavenProject project,
- org.eclipse.aether.artifact.ArtifactTypeRegistry typeRegistry )
- throws DependencyCollectorException
- {
- for ( org.apache.maven.model.Dependency dependency : project.getDependencies() )
- {
- Dependency aetherDep = toDependency( dependency, typeRegistry );
- collectRequest.addDependency( aetherDep );
- }
- }
-
private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )
throws DependencyCollectorException
{
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DirectScopeDependencySelector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DirectScopeDependencySelector.java
index e930597..780c530 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DirectScopeDependencySelector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/Maven31DirectScopeDependencySelector.java
@@ -19,6 +19,8 @@ package org.apache.maven.shared.transfer.dependencies.collect.internal;
* under the License.
*/
+import java.util.Objects;
+
import org.eclipse.aether.collection.DependencyCollectionContext;
import org.eclipse.aether.collection.DependencySelector;
import org.eclipse.aether.graph.Dependency;
@@ -30,27 +32,26 @@ import org.eclipse.aether.graph.Dependency;
* @see {@link Dependency#getScope()}
* @author Gabriel Belingueres
*/
-public class Maven31DirectScopeDependencySelector
+class Maven31DirectScopeDependencySelector
implements DependencySelector
{
private final String scope;
private final int depth;
+
+ private final int hashCode;
- public Maven31DirectScopeDependencySelector( String scope )
+ Maven31DirectScopeDependencySelector( String scope )
{
this( scope, 0 );
}
private Maven31DirectScopeDependencySelector( String scope, int depth )
{
- if ( scope == null )
- {
- throw new IllegalArgumentException( "scope is null!" );
- }
- this.scope = scope;
+ this.scope = Objects.requireNonNull( scope, "scope is null!" );
this.depth = depth;
+ this.hashCode = Objects.hash( scope, depth );
}
/**
@@ -87,11 +88,7 @@ public class Maven31DirectScopeDependencySelector
@Override
public int hashCode()
{
- final int prime = 31;
- int result = 1;
- result = prime * result + depth;
- result = prime * result + ( ( scope == null ) ? 0 : scope.hashCode() );
- return result;
+ return hashCode;
}
@Override
@@ -114,14 +111,7 @@ public class Maven31DirectScopeDependencySelector
{
return false;
}
- if ( scope == null )
- {
- if ( other.scope != null )
- {
- return false;
- }
- }
- else if ( !scope.equals( other.scope ) )
+ if ( !Objects.equals( scope, other.scope ) )
{
return false;
}
diff --git a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
index ff8c314..a98c189 100644
--- a/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
+++ b/src/main/java/org/apache/maven/shared/transfer/dependencies/collect/internal/MavenDependencyCollector.java
@@ -21,7 +21,6 @@ package org.apache.maven.shared.transfer.dependencies.collect.internal;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
-import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
@@ -42,7 +41,13 @@ public interface MavenDependencyCollector
CollectorResult collectDependencies( Model root )
throws DependencyCollectorException;
- CollectorResult collectDependenciesGraph( ProjectBuildingRequest buildingRequest )
+ CollectorResult collectDependenciesGraph( Dependency root )
+ throws DependencyCollectorException;
+
+ CollectorResult collectDependenciesGraph( DependableCoordinate root )
+ throws DependencyCollectorException;
+
+ CollectorResult collectDependenciesGraph( Model root )
throws DependencyCollectorException;
}