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 <rfscho...@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