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 2021/05/22 11:32:29 UTC
[maven-dependency-tree] 04/04: Adjust Exception Fix @since
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch MSHARED-788
in repository https://gitbox.apache.org/repos/asf/maven-dependency-tree.git
commit 960831889c24110d0ab3dfcae0f1d5d43269b401
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat May 22 13:32:07 2021 +0200
Adjust Exception
Fix @since
---
.../graph/DependencyCollectorBuilder.java | 4 +-
.../graph/DependencyCollectorBuilderException.java | 54 ++++++++++++++++
.../DefaultDependencyCollectorBuilder.java | 8 +--
.../graph/internal/ExceptionHandler.java | 30 +++++++++
.../shared/dependency/graph/internal/Invoker.java | 74 +++++++---------------
.../Maven31DependencyCollectorBuilder.java | 69 ++++++++++++++------
.../internal/Maven31DependencyGraphBuilder.java | 20 +++++-
.../internal/Maven3DependencyCollectorBuilder.java | 60 ++++++++++++++----
.../internal/Maven3DependencyGraphBuilder.java | 2 +-
.../graph/internal/maven30/ConflictIdSorter.java | 2 +-
.../graph/internal/maven30/ConflictResolver.java | 2 +-
.../maven30/ExclusionDependencySelector.java | 2 +-
.../graph/internal/maven30/JavaScopeDeriver.java | 2 +-
.../graph/internal/maven30/JavaScopeSelector.java | 2 +-
.../Maven3DirectScopeDependencySelector.java | 2 +-
.../internal/maven30/NearestVersionSelector.java | 2 +-
.../maven30/SimpleOptionalitySelector.java | 2 +-
.../Maven31DirectScopeDependencySelector.java | 2 +-
18 files changed, 233 insertions(+), 106 deletions(-)
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilder.java
index 8865fad..43cfb40 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilder.java
@@ -28,7 +28,7 @@ import org.apache.maven.project.ProjectBuildingRequest;
* particular Aether implementations.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public interface DependencyCollectorBuilder
{
@@ -45,6 +45,6 @@ public interface DependencyCollectorBuilder
*/
DependencyNode collectDependencyGraph( ArtifactRepository localRepository, ProjectBuildingRequest buildingRequest,
ArtifactFilter filter )
- throws DependencyGraphBuilderException;
+ throws DependencyCollectorBuilderException;
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilderException.java b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilderException.java
new file mode 100644
index 0000000..866213d
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/DependencyCollectorBuilderException.java
@@ -0,0 +1,54 @@
+package org.apache.maven.shared.dependency.graph;
+
+/*
+ * 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.
+ */
+
+/**
+ * Indicates an issue with the DependencyCollectorBuilder
+ *
+ * @author Robert Scholte
+ * @since 3.1.0
+ */
+public class DependencyCollectorBuilderException
+ extends Exception
+{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1305852327231950979L;
+
+ // constructors -----------------------------------------------------------
+
+ /**
+ * @param message Message indicating why dependency graph could not be resolved.
+ */
+ public DependencyCollectorBuilderException( String message )
+ {
+ super( message );
+ }
+
+ /**
+ * @param message Message indicating why dependency graph could not be resolved.
+ * @param cause Throwable indicating at which point the graph failed to be resolved.
+ */
+ public DependencyCollectorBuilderException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyCollectorBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyCollectorBuilder.java
index ff420b9..e29cc9d 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyCollectorBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/DefaultDependencyCollectorBuilder.java
@@ -24,7 +24,7 @@ import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilder;
-import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
+import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilderException;
import org.apache.maven.shared.dependency.graph.DependencyNode;
import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusContainer;
@@ -40,7 +40,7 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
* 3.1+ particular Aether implementations.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
@Component( role = DependencyCollectorBuilder.class )
public class DefaultDependencyCollectorBuilder
@@ -52,7 +52,7 @@ public class DefaultDependencyCollectorBuilder
@Override
public DependencyNode collectDependencyGraph( ArtifactRepository localRepository,
ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
- throws DependencyGraphBuilderException
+ throws DependencyCollectorBuilderException
{
try
{
@@ -74,7 +74,7 @@ public class DefaultDependencyCollectorBuilder
}
catch ( ComponentLookupException e )
{
- throw new DependencyGraphBuilderException( e.getMessage(), e );
+ throw new DependencyCollectorBuilderException( e.getMessage(), e );
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/ExceptionHandler.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/ExceptionHandler.java
new file mode 100644
index 0000000..2dd86cc
--- /dev/null
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/ExceptionHandler.java
@@ -0,0 +1,30 @@
+package org.apache.maven.shared.dependency.graph.internal;
+
+/*
+ * 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.
+ */
+
+/**
+ *
+ *
+ * @param <T>
+ */
+interface ExceptionHandler<T extends Exception>
+{
+ T create( String message, Exception exception );
+}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Invoker.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Invoker.java
index cabfe37..8cc8851 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Invoker.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Invoker.java
@@ -19,8 +19,6 @@ package org.apache.maven.shared.dependency.graph.internal;
* under the License.
*/
-import java.lang.reflect.InvocationTargetException;
-
import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
/**
@@ -33,34 +31,27 @@ final class Invoker
// do not instantiate
}
- public static Object invoke( Object object, String method )
- throws DependencyGraphBuilderException
+ static <T extends Exception> Object invoke( Object object, String method, ExceptionHandler<T> exceptionHandler )
+ throws T
{
- return invoke( object.getClass(), object, method );
+ return invoke( object.getClass(), object, method, exceptionHandler );
}
- public static Object invoke( Class<?> objectClazz, Object object, String method )
- throws DependencyGraphBuilderException
+ static <T extends Exception> Object invoke( Class<?> objectClazz, Object object, String method,
+ ExceptionHandler<T> exceptionHandler )
+ throws T
{
try
{
return objectClazz.getMethod( method ).invoke( object );
}
- catch ( IllegalAccessException e )
- {
- throw new DependencyGraphBuilderException( e.getMessage(), e );
- }
- catch ( InvocationTargetException e )
- {
- throw new DependencyGraphBuilderException( e.getMessage(), e );
- }
- catch ( NoSuchMethodException e )
+ catch ( ReflectiveOperationException e )
{
- throw new DependencyGraphBuilderException( e.getMessage(), e );
+ throw exceptionHandler.create( e.getMessage(), e );
}
}
- public static Object invoke( Object object, String method, Class<?> clazz, Object arg )
+ static Object invoke( Object object, String method, Class<?> clazz, Object arg )
throws DependencyGraphBuilderException
{
try
@@ -68,60 +59,39 @@ final class Invoker
final Class<?> objectClazz = object.getClass();
return objectClazz.getMethod( method, clazz ).invoke( object, arg );
}
- catch ( IllegalAccessException e )
- {
- throw new DependencyGraphBuilderException( e.getMessage(), e );
- }
- catch ( InvocationTargetException e )
- {
- throw new DependencyGraphBuilderException( e.getMessage(), e );
- }
- catch ( NoSuchMethodException e )
+ catch ( ReflectiveOperationException e )
{
throw new DependencyGraphBuilderException( e.getMessage(), e );
}
}
- public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
- throws DependencyGraphBuilderException
+ static <T extends Exception> Object invoke( Class<?> objectClazz, String staticMethod,
+ Class<?> argClazz, Object arg,
+ ExceptionHandler<T> exceptionHandler )
+ throws T
{
try
{
return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
}
- catch ( IllegalAccessException e )
+ catch ( ReflectiveOperationException e )
{
- throw new DependencyGraphBuilderException( e.getMessage(), e );
- }
- catch ( InvocationTargetException e )
- {
- throw new DependencyGraphBuilderException( e.getMessage(), e );
- }
- catch ( NoSuchMethodException e )
- {
- throw new DependencyGraphBuilderException( e.getMessage(), e );
+ throw exceptionHandler.create( e.getMessage(), e );
}
}
- public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz1, Class<?> argClazz2,
- Object arg1, Object arg2 )
- throws DependencyGraphBuilderException
+ static <T extends Exception> Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz1,
+ Class<?> argClazz2, Object arg1, Object arg2,
+ ExceptionHandler<T> exceptionHandler )
+ throws T
{
try
{
return objectClazz.getMethod( staticMethod, argClazz1, argClazz2 ).invoke( null, arg1, arg2 );
}
- catch ( IllegalAccessException e )
+ catch ( ReflectiveOperationException e )
{
- throw new DependencyGraphBuilderException( e.getMessage(), e );
- }
- catch ( InvocationTargetException e )
- {
- throw new DependencyGraphBuilderException( e.getMessage(), e );
- }
- catch ( NoSuchMethodException e )
- {
- throw new DependencyGraphBuilderException( e.getMessage(), e );
+ throw exceptionHandler.create( e.getMessage(), e );
}
}
}
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyCollectorBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyCollectorBuilder.java
index 62e659c..15c173d 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyCollectorBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyCollectorBuilder.java
@@ -31,7 +31,7 @@ import org.apache.maven.model.Dependency;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilder;
-import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
+import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilderException;
import org.apache.maven.shared.dependency.graph.DependencyNode;
import org.apache.maven.shared.dependency.graph.internal.maven31.Maven31DirectScopeDependencySelector;
import org.codehaus.plexus.component.annotations.Component;
@@ -46,6 +46,7 @@ import org.eclipse.aether.collection.DependencyCollectionException;
import org.eclipse.aether.collection.DependencyGraphTransformer;
import org.eclipse.aether.collection.DependencySelector;
import org.eclipse.aether.graph.DependencyVisitor;
+import org.eclipse.aether.graph.Exclusion;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
import org.eclipse.aether.util.graph.selector.AndDependencySelector;
@@ -63,7 +64,7 @@ import org.eclipse.aether.version.VersionConstraint;
* Project dependency raw dependency collector API, abstracting Maven 3.1+'s Aether implementation.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
@Component( role = DependencyCollectorBuilder.class, hint = "maven31" )
public class Maven31DependencyCollectorBuilder
@@ -72,11 +73,25 @@ public class Maven31DependencyCollectorBuilder
{
@Requirement
private RepositorySystem repositorySystem;
+
+ private final ExceptionHandler<DependencyCollectorBuilderException> exceptionHandler;
+
+ public Maven31DependencyCollectorBuilder()
+ {
+ this.exceptionHandler = new ExceptionHandler<DependencyCollectorBuilderException>()
+ {
+ @Override
+ public DependencyCollectorBuilderException create( String message, Exception exception )
+ {
+ return new DependencyCollectorBuilderException( message, exception );
+ }
+ };
+ }
@Override
public DependencyNode collectDependencyGraph( ArtifactRepository localRepository,
ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
- throws DependencyGraphBuilderException
+ throws DependencyCollectorBuilderException
{
DefaultRepositorySystemSession session = null;
try
@@ -87,7 +102,8 @@ public class Maven31DependencyCollectorBuilder
List<ArtifactRepository> remoteArtifactRepositories = project.getRemoteArtifactRepositories();
DefaultRepositorySystemSession repositorySession =
- (DefaultRepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+ (DefaultRepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession",
+ exceptionHandler );
session = new DefaultRepositorySystemSession( repositorySession );
@@ -107,13 +123,15 @@ public class Maven31DependencyCollectorBuilder
org.eclipse.aether.artifact.Artifact aetherArtifact =
(org.eclipse.aether.artifact.Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
- Artifact.class, projectArtifact );
+ Artifact.class, projectArtifact,
+ exceptionHandler );
@SuppressWarnings( "unchecked" )
List<org.eclipse.aether.repository.RemoteRepository> aetherRepos =
(List<org.eclipse.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos",
List.class,
- remoteArtifactRepositories );
+ remoteArtifactRepositories,
+ exceptionHandler );
CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot( new org.eclipse.aether.graph.Dependency( aetherArtifact, "" ) );
@@ -127,12 +145,6 @@ public class Maven31DependencyCollectorBuilder
org.eclipse.aether.graph.DependencyNode rootNode = collectResult.getRoot();
-// CloningDependencyVisitor cloner = new CloningDependencyVisitor();
-// TreeDependencyVisitor treeVisitor = new TreeDependencyVisitor( cloner );
-// rootNode.accept( treeVisitor );
-//
-// rootNode = cloner.getRootNode();
-
if ( getLogger().isDebugEnabled() )
{
logTree( rootNode );
@@ -142,7 +154,7 @@ public class Maven31DependencyCollectorBuilder
}
catch ( DependencyCollectionException e )
{
- throw new DependencyGraphBuilderException( "Could not collect dependencies: " + e.getResult(), e );
+ throw new DependencyCollectorBuilderException( "Could not collect dependencies: " + e.getResult(), e );
}
finally
{
@@ -180,7 +192,7 @@ public class Maven31DependencyCollectorBuilder
private void collectManagedDependencyList( CollectRequest collectRequest, MavenProject project,
ArtifactTypeRegistry stereotypes )
- throws DependencyGraphBuilderException
+ throws DependencyCollectorBuilderException
{
if ( project.getDependencyManagement() != null )
{
@@ -194,7 +206,7 @@ public class Maven31DependencyCollectorBuilder
private void collectDependencyList( CollectRequest collectRequest, MavenProject project,
org.eclipse.aether.artifact.ArtifactTypeRegistry stereotypes )
- throws DependencyGraphBuilderException
+ throws DependencyCollectorBuilderException
{
for ( Dependency dependency : project.getDependencies() )
{
@@ -206,13 +218,13 @@ public class Maven31DependencyCollectorBuilder
// CHECKSTYLE_OFF: LineLength
private org.eclipse.aether.graph.Dependency toAetherDependency( org.eclipse.aether.artifact.ArtifactTypeRegistry stereotypes,
Dependency dependency )
- throws DependencyGraphBuilderException
+ throws DependencyCollectorBuilderException
{
org.eclipse.aether.graph.Dependency aetherDep =
(org.eclipse.aether.graph.Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency",
Dependency.class,
org.eclipse.aether.artifact.ArtifactTypeRegistry.class,
- dependency, stereotypes );
+ dependency, stereotypes, exceptionHandler );
return aetherDep;
}
// CHECKSTYLE_ON: LineLength
@@ -223,15 +235,16 @@ public class Maven31DependencyCollectorBuilder
try
{
- Artifact mavenArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
- org.eclipse.aether.artifact.Artifact.class, artifact );
+ Artifact mavenArtifact =
+ (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+ org.eclipse.aether.artifact.Artifact.class, artifact, exceptionHandler );
mavenArtifact.setScope( dep.getScope() );
mavenArtifact.setOptional( dep.isOptional() );
return mavenArtifact;
}
- catch ( DependencyGraphBuilderException e )
+ catch ( DependencyCollectorBuilderException e )
{
// ReflectionException should not happen
throw new RuntimeException( e.getMessage(), e );
@@ -249,10 +262,24 @@ public class Maven31DependencyCollectorBuilder
{
optional = node.getDependency().isOptional();
}
+
+ List<org.apache.maven.model.Exclusion> exclusions = null;
+ if ( node.getDependency() != null )
+ {
+ exclusions = new ArrayList<>( node.getDependency().getExclusions().size() );
+ for ( Exclusion exclusion : node.getDependency().getExclusions() )
+ {
+ org.apache.maven.model.Exclusion modelExclusion = new org.apache.maven.model.Exclusion();
+ modelExclusion.setGroupId( exclusion.getGroupId() );
+ modelExclusion.setArtifactId( exclusion.getArtifactId() );
+ exclusions.add( modelExclusion );
+ }
+ }
DefaultDependencyNode current =
new DefaultDependencyNode( parent, artifact, premanagedVersion, premanagedScope,
- getVersionSelectedFromRange( node.getVersionConstraint() ), optional );
+ getVersionSelectedFromRange( node.getVersionConstraint() ), optional,
+ exclusions );
List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
for ( org.eclipse.aether.graph.DependencyNode child : node.getChildren() )
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
index 5a53dcb..c1f9ab4 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java
@@ -62,6 +62,20 @@ public class Maven31DependencyGraphBuilder
@Requirement
private ProjectDependenciesResolver resolver;
+ private final ExceptionHandler<DependencyGraphBuilderException> exceptionHandler;
+
+ public Maven31DependencyGraphBuilder()
+ {
+ this.exceptionHandler = new ExceptionHandler<DependencyGraphBuilderException>()
+ {
+ @Override
+ public DependencyGraphBuilderException create( String message, Exception exception )
+ {
+ return new DependencyGraphBuilderException( message, exception );
+ }
+ };
+ }
+
/**
* Builds the dependency graph for Maven 3.1+.
*
@@ -95,7 +109,7 @@ public class Maven31DependencyGraphBuilder
MavenProject project = buildingRequest.getProject();
RepositorySystemSession session =
- (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+ (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession", exceptionHandler );
/*
* if ( Boolean.TRUE != ( (Boolean) session.getConfigProperties().get(
@@ -111,7 +125,7 @@ public class Maven31DependencyGraphBuilder
final DependencyResolutionResult result = resolveDependencies( request, reactorProjects );
org.eclipse.aether.graph.DependencyNode graph =
(org.eclipse.aether.graph.DependencyNode) Invoker.invoke( DependencyResolutionResult.class, result,
- "getDependencyGraph" );
+ "getDependencyGraph", exceptionHandler );
return buildDependencyNode( null, graph, project.getArtifact(), filter );
}
@@ -189,7 +203,7 @@ public class Maven31DependencyGraphBuilder
try
{
Artifact mavenArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
- org.eclipse.aether.artifact.Artifact.class, artifact );
+ org.eclipse.aether.artifact.Artifact.class, artifact, exceptionHandler );
mavenArtifact.setScope( dep.getScope() );
mavenArtifact.setOptional( dep.isOptional() );
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
index e27f944..24c0d65 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
@@ -31,7 +31,7 @@ import org.apache.maven.model.Dependency;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilder;
-import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
+import org.apache.maven.shared.dependency.graph.DependencyCollectorBuilderException;
import org.apache.maven.shared.dependency.graph.DependencyNode;
import org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver;
import org.apache.maven.shared.dependency.graph.internal.maven30.JavaScopeDeriver;
@@ -51,6 +51,7 @@ import org.sonatype.aether.collection.DependencyCollectionException;
import org.sonatype.aether.collection.DependencyGraphTransformer;
import org.sonatype.aether.collection.DependencySelector;
import org.sonatype.aether.graph.DependencyVisitor;
+import org.sonatype.aether.graph.Exclusion;
import org.sonatype.aether.util.DefaultRepositorySystemSession;
import org.sonatype.aether.util.artifact.JavaScopes;
import org.sonatype.aether.util.graph.TreeDependencyVisitor;
@@ -63,7 +64,7 @@ import org.sonatype.aether.version.VersionConstraint;
* Project dependency raw dependency collector API, abstracting Maven 3's Aether implementation.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
@Component( role = DependencyCollectorBuilder.class, hint = "maven3" )
public class Maven3DependencyCollectorBuilder
@@ -72,11 +73,25 @@ public class Maven3DependencyCollectorBuilder
{
@Requirement
private RepositorySystem repositorySystem;
+
+ private final ExceptionHandler<DependencyCollectorBuilderException> exceptionHandler;
+
+ public Maven3DependencyCollectorBuilder()
+ {
+ this.exceptionHandler = new ExceptionHandler<DependencyCollectorBuilderException>()
+ {
+ @Override
+ public DependencyCollectorBuilderException create( String message, Exception exception )
+ {
+ return new DependencyCollectorBuilderException( message, exception );
+ }
+ };
+ }
@Override
public DependencyNode collectDependencyGraph( ArtifactRepository localRepository,
ProjectBuildingRequest buildingRequest, ArtifactFilter filter )
- throws DependencyGraphBuilderException
+ throws DependencyCollectorBuilderException
{
try
{
@@ -108,13 +123,15 @@ public class Maven3DependencyCollectorBuilder
org.sonatype.aether.artifact.Artifact aetherArtifact =
(org.sonatype.aether.artifact.Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
- Artifact.class, projectArtifact );
+ Artifact.class, projectArtifact,
+ exceptionHandler );
@SuppressWarnings( "unchecked" )
List<org.sonatype.aether.repository.RemoteRepository> aetherRepos =
(List<org.sonatype.aether.repository.RemoteRepository>) Invoker.invoke( RepositoryUtils.class,
"toRepos", List.class,
- remoteArtifactRepositories );
+ remoteArtifactRepositories,
+ exceptionHandler );
CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot( new org.sonatype.aether.graph.Dependency( aetherArtifact, "" ) );
@@ -137,7 +154,7 @@ public class Maven3DependencyCollectorBuilder
}
catch ( DependencyCollectionException e )
{
- throw new DependencyGraphBuilderException( "Could not collect dependencies: " + e.getResult(), e );
+ throw new DependencyCollectorBuilderException( "Could not collect dependencies: " + e.getResult(), e );
}
}
@@ -181,7 +198,7 @@ public class Maven3DependencyCollectorBuilder
private void collectManagedDependencyList( CollectRequest collectRequest, MavenProject project,
ArtifactTypeRegistry stereotypes )
- throws DependencyGraphBuilderException
+ throws DependencyCollectorBuilderException
{
if ( project.getDependencyManagement() != null )
{
@@ -195,7 +212,7 @@ public class Maven3DependencyCollectorBuilder
private void collectDependencyList( CollectRequest collectRequest, MavenProject project,
org.sonatype.aether.artifact.ArtifactTypeRegistry stereotypes )
- throws DependencyGraphBuilderException
+ throws DependencyCollectorBuilderException
{
for ( Dependency dependency : project.getDependencies() )
{
@@ -207,13 +224,13 @@ public class Maven3DependencyCollectorBuilder
// CHECKSTYLE_OFF: LineLength
private org.sonatype.aether.graph.Dependency toAetherDependency( org.sonatype.aether.artifact.ArtifactTypeRegistry stereotypes,
Dependency dependency )
- throws DependencyGraphBuilderException
+ throws DependencyCollectorBuilderException
{
org.sonatype.aether.graph.Dependency aetherDep =
(org.sonatype.aether.graph.Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency",
Dependency.class,
org.sonatype.aether.artifact.ArtifactTypeRegistry.class,
- dependency, stereotypes );
+ dependency, stereotypes, exceptionHandler );
return aetherDep;
}
// CHECKSTYLE_ON: LineLength
@@ -224,15 +241,16 @@ public class Maven3DependencyCollectorBuilder
try
{
- Artifact mavenArtifact = (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
- org.sonatype.aether.artifact.Artifact.class, artifact );
+ Artifact mavenArtifact =
+ (Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+ org.sonatype.aether.artifact.Artifact.class, artifact, exceptionHandler );
mavenArtifact.setScope( dep.getScope() );
mavenArtifact.setOptional( dep.isOptional() );
return mavenArtifact;
}
- catch ( DependencyGraphBuilderException e )
+ catch ( DependencyCollectorBuilderException e )
{
// ReflectionException should not happen
throw new RuntimeException( e.getMessage(), e );
@@ -251,9 +269,23 @@ public class Maven3DependencyCollectorBuilder
optional = node.getDependency().isOptional();
}
+ List<org.apache.maven.model.Exclusion> exclusions = null;
+ if ( node.getDependency() != null )
+ {
+ exclusions = new ArrayList<>( node.getDependency().getExclusions().size() );
+ for ( Exclusion exclusion : node.getDependency().getExclusions() )
+ {
+ org.apache.maven.model.Exclusion modelExclusion = new org.apache.maven.model.Exclusion();
+ modelExclusion.setGroupId( exclusion.getGroupId() );
+ modelExclusion.setArtifactId( exclusion.getArtifactId() );
+ exclusions.add( modelExclusion );
+ }
+ }
+
DefaultDependencyNode current =
new DefaultDependencyNode( parent, artifact, premanagedVersion, premanagedScope,
- getVersionSelectedFromRange( node.getVersionConstraint() ), optional );
+ getVersionSelectedFromRange( node.getVersionConstraint() ), optional,
+ exclusions );
List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() );
for ( org.sonatype.aether.graph.DependencyNode child : node.getChildren() )
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
index 2a2e58b..39e2a35 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyGraphBuilder.java
@@ -130,7 +130,7 @@ public class Maven3DependencyGraphBuilder
List<Dependency> reactorDeps = getReactorDependencies( reactorProjects, result.getUnresolvedDependencies() );
result.getUnresolvedDependencies().removeAll( reactorDeps );
- Invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps );
+ result.getResolvedDependencies().addAll( reactorDeps );
if ( !result.getUnresolvedDependencies().isEmpty() )
{
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ConflictIdSorter.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ConflictIdSorter.java
index 44cbbe7..d686842 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ConflictIdSorter.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ConflictIdSorter.java
@@ -40,7 +40,7 @@ import org.sonatype.aether.util.graph.transformer.TransformationContextKeys;
* This class is a copy of their homonymous in the Eclipse Aether library, adapted to work with Sonatype Aether.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public final class ConflictIdSorter
implements DependencyGraphTransformer
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ConflictResolver.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ConflictResolver.java
index 1e60a32..abbb36e 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ConflictResolver.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ConflictResolver.java
@@ -45,7 +45,7 @@ import org.sonatype.aether.util.graph.transformer.TransformationContextKeys;
* This class is a copy of their homonymous in the Eclipse Aether library, adapted to work with Sonatype Aether.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public final class ConflictResolver
implements DependencyGraphTransformer
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ExclusionDependencySelector.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ExclusionDependencySelector.java
index 36f2bd7..e9555f9 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ExclusionDependencySelector.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/ExclusionDependencySelector.java
@@ -34,7 +34,7 @@ import org.sonatype.aether.graph.Exclusion;
* This class is a copy of their homonymous in the Eclipse Aether library, adapted to work with Sonatype Aether.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public class ExclusionDependencySelector
implements DependencySelector
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/JavaScopeDeriver.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/JavaScopeDeriver.java
index 73367bf..d35abf0 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/JavaScopeDeriver.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/JavaScopeDeriver.java
@@ -28,7 +28,7 @@ import org.sonatype.aether.util.artifact.JavaScopes;
* This class is a copy of their homonymous in the Eclipse Aether library, adapted to work with Sonatype Aether.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public class JavaScopeDeriver
extends ScopeDeriver
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/JavaScopeSelector.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/JavaScopeSelector.java
index 6eeea83..9a810e7 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/JavaScopeSelector.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/JavaScopeSelector.java
@@ -33,7 +33,7 @@ import org.sonatype.aether.util.artifact.JavaScopes;
* This class is a copy of their homonymous in the Eclipse Aether library, adapted to work with Sonatype Aether.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public final class JavaScopeSelector
extends ScopeSelector
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/Maven3DirectScopeDependencySelector.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/Maven3DirectScopeDependencySelector.java
index e66b80b..4776e6d 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/Maven3DirectScopeDependencySelector.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/Maven3DirectScopeDependencySelector.java
@@ -29,7 +29,7 @@ import org.sonatype.aether.graph.Dependency;
*
* @see {@link Dependency#getScope()}
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public class Maven3DirectScopeDependencySelector
implements DependencySelector
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/NearestVersionSelector.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/NearestVersionSelector.java
index 8d2bc93..c793b96 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/NearestVersionSelector.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/NearestVersionSelector.java
@@ -40,7 +40,7 @@ import org.sonatype.aether.version.VersionConstraint;
* This class is a copy of their homonymous in the Eclipse Aether library, adapted to work with Sonatype Aether.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public final class NearestVersionSelector
extends VersionSelector
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/SimpleOptionalitySelector.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/SimpleOptionalitySelector.java
index ffd6a63..d63df0b 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/SimpleOptionalitySelector.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/SimpleOptionalitySelector.java
@@ -30,7 +30,7 @@ import org.sonatype.aether.RepositoryException;
* This class is a copy of their homonymous in the Eclipse Aether library, adapted to work with Sonatype Aether.
*
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public class SimpleOptionalitySelector
extends OptionalitySelector
diff --git a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven31/Maven31DirectScopeDependencySelector.java b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven31/Maven31DirectScopeDependencySelector.java
index dbc71c5..95ee25c 100644
--- a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven31/Maven31DirectScopeDependencySelector.java
+++ b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven31/Maven31DirectScopeDependencySelector.java
@@ -29,7 +29,7 @@ import org.eclipse.aether.graph.Dependency;
*
* @see {@link Dependency#getScope()}
* @author Gabriel Belingueres
- * @since 3.0.2
+ * @since 3.1.0
*/
public class Maven31DirectScopeDependencySelector
implements DependencySelector