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 2016/06/12 12:02:30 UTC
svn commit: r1747984 [1/2] - in
/maven/shared/trunk/maven-artifact-transfer/src:
main/java/org/apache/maven/shared/dependencies/
main/java/org/apache/maven/shared/dependencies/collect/
main/java/org/apache/maven/shared/dependencies/collect/internal/ ma...
Author: rfscholte
Date: Sun Jun 12 12:02:29 2016
New Revision: 1747984
URL: http://svn.apache.org/viewvc?rev=1747984&view=rev
Log:
Improve naming: it's not about dependencies, but about instances which have dependencies, now called dependables.
A MavenProject is a special case.
And again: an artifact cannot have dependencies, it is simply a filewrapper with a coordinate. So don't have a dependencyResolver based on artifact.
Added:
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DefaultDependableCoordinate.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DependableCoordinate.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/TransferUtils.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/CollectorResult.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollector.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollectorException.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/DefaultDependencyCollector.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Invoker.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30CollectorResult.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30DependencyCollector.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31CollectorResult.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31DependencyCollector.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolver.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolverException.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/DefaultDependencyResolver.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Invoker.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30ArtifactResult.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30DependencyResolver.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven31ArtifactResult.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven31DependencyResolver.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/DefaultProjectCoordinate.java
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/project/ProjectCoordinate.java
Removed:
maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependency/
Modified:
maven/shared/trunk/maven-artifact-transfer/src/test/java/org/apache/maven/shared/dependency/DefaultDependencyCoordinateTest.java
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DefaultDependableCoordinate.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DefaultDependableCoordinate.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DefaultDependableCoordinate.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DefaultDependableCoordinate.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,168 @@
+package org.apache.maven.shared.dependencies;
+
+/*
+ * 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.
+ */
+
+/**
+ * Common usage of an DependableCoordinate for a Mojo
+ *
+ * <pre>
+ * @Parameter
+ * private DefaultDependableCoordinate[] dependencies;
+ * </pre>
+ *
+ * and
+ *
+ * <pre>
+ * private DefaultDependableCoordinate dependable = new DefaultDependableCoordinate();
+ *
+ * @Parameter( property = "groupId" )
+ * private String groupId;
+ *
+ * @Parameter( property = "artifactId" )
+ * private String artifactId;
+ *
+ * @Parameter( property = "version" )
+ * private String version;
+ *
+ * @Parameter( property = "classifier" )
+ * private String classifier;
+ *
+ * @Parameter( property = "type" )
+ * private String type;
+ *
+ * public void setGroupId( String groupId )
+ * {
+ * this.dependable.setGroupId( groupId );
+ * }
+ *
+ * public void setArtifactId( String artifactId )
+ * {
+ * this.dependable.setArtifactId( artifactId );
+ * }
+ *
+ * public void setVersion( String version )
+ * {
+ * this.dependable.setVersion( version );
+ * }
+ *
+ * public void setClassifier( String classifier )
+ * {
+ * this.dependable.setClassifier( classifier );
+ * }
+ *
+ * public void setType( String type )
+ * {
+ * this.dependable.setType( type );
+ * }
+ * </pre>
+ * <strong>Note: </strong> type is not the same as extension!
+ * {@link org.apache.maven.artifact.handler.ArtifactHandler}s are used to map a type to an extension.
+ *
+ *
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public class DefaultDependableCoordinate implements DependableCoordinate
+{
+ private String groupId;
+
+ private String artifactId;
+
+ private String version;
+
+ private String type;
+
+ private String classifier;
+
+ @Override
+ public final String getGroupId()
+ {
+ return groupId;
+ }
+
+ public final void setGroupId( String groupId )
+ {
+ this.groupId = groupId;
+ }
+
+ @Override
+ public final String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public final void setArtifactId( String artifactId )
+ {
+ this.artifactId = artifactId;
+ }
+
+ @Override
+ public final String getVersion()
+ {
+ return version;
+ }
+
+ public final void setVersion( String version )
+ {
+ this.version = version;
+ }
+
+ @Override
+ public final String getType()
+ {
+ return type != null ? type : "jar";
+ }
+
+ public void setType( String type )
+ {
+ this.type = type;
+ }
+
+ @Override
+ public final String getClassifier()
+ {
+ return classifier;
+ }
+
+ public final void setClassifier( String classifier )
+ {
+ this.classifier = classifier;
+ }
+
+ /**
+ * @see org.apache.maven.artifact.DefaultArtifact#toString()
+ */
+ @Override
+ public String toString()
+ {
+ StringBuilder sb =
+ new StringBuilder().append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( getType() );
+
+ if ( classifier != null )
+ {
+ sb.append( ':' ).append( classifier );
+ }
+
+ sb.append( ':' ).append( version );
+
+ return sb.toString();
+ }
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DependableCoordinate.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DependableCoordinate.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DependableCoordinate.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/DependableCoordinate.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,70 @@
+package org.apache.maven.shared.dependencies;
+
+/*
+ * 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.
+ */
+
+/**
+ * <p>
+ * Represents any instance which may contain Maven Dependencies, both explicit or implicit to (transitively) resolve
+ * and calculate its path for either a local or remote Maven2 repository.
+ * </p>
+ * <p>
+ * The version can be a version range. Based on the groupId and artifactId it will be resolved to the actual version.
+ * </p>
+ * <p>
+ * The type will be translated to an extension based on the artifact descriptor ({@code pom.xml} matching the groupId,
+ * artifactId and version.
+ * </p>
+ * A MavenProject is not considered a DependableCoordinate because is should never have a versionRange, and it has packaging
+ * instead of type.
+ *
+ * @author Robert Scholte
+ */
+public interface DependableCoordinate
+{
+ /**
+ * @return the groupId of the coordinate
+ */
+ String getGroupId();
+
+ /**
+ *
+ * @return the artifact of the coordinate
+ */
+ String getArtifactId();
+
+ /**
+ * A version or versionRange
+ *
+ * @return the version
+ */
+ String getVersion();
+
+ /**
+ *
+ * @return the type of the coordinate
+ */
+ String getType();
+
+ /**
+ *
+ * @return the classifier or {@code null}
+ */
+ String getClassifier();
+}
\ No newline at end of file
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/TransferUtils.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/TransferUtils.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/TransferUtils.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/TransferUtils.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,111 @@
+package org.apache.maven.shared.dependencies;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.ReportPlugin;
+
+/**
+ * Utility class
+ *
+ * @author Robert Scholte
+ *
+ */
+public final class TransferUtils
+{
+ private TransferUtils()
+ {
+ }
+
+ public static DependableCoordinate toDependableCoordinate( Dependency dependency )
+ {
+ DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+
+ coordinate.setGroupId( dependency.getGroupId() );
+ coordinate.setArtifactId( dependency.getArtifactId() );
+ coordinate.setVersion( dependency.getVersion() );
+ coordinate.setType( dependency.getType() );
+ coordinate.setClassifier( dependency.getClassifier() );
+
+ return coordinate;
+ }
+
+ public static DependableCoordinate toDependableCoordinate( Extension extension )
+ {
+ DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+
+ coordinate.setGroupId( extension.getGroupId() );
+ coordinate.setArtifactId( extension.getArtifactId() );
+ coordinate.setVersion( extension.getVersion() );
+
+ return coordinate;
+ }
+
+ public static DependableCoordinate toDependableCoordinate( Model model )
+ {
+ DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+
+ coordinate.setGroupId( model.getGroupId() );
+ coordinate.setArtifactId( model.getArtifactId() );
+ coordinate.setVersion( model.getVersion() );
+ coordinate.setType( model.getPackaging() );
+
+ return coordinate;
+ }
+
+ public static DependableCoordinate toDependableCoordinate( Parent parent )
+ {
+ DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+
+ coordinate.setGroupId( parent.getGroupId() );
+ coordinate.setArtifactId( parent.getArtifactId() );
+ coordinate.setVersion( parent.getVersion() );
+ coordinate.setType( "pom" );
+
+ return coordinate;
+ }
+
+ public static DependableCoordinate toDependableCoordinate( Plugin plugin )
+ {
+ DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+
+ coordinate.setGroupId( plugin.getGroupId() );
+ coordinate.setArtifactId( plugin.getArtifactId() );
+ coordinate.setVersion( plugin.getVersion() );
+
+ return coordinate;
+ }
+
+ public static DependableCoordinate toDependableCoordinate( ReportPlugin plugin )
+ {
+ DefaultDependableCoordinate coordinate = new DefaultDependableCoordinate();
+
+ coordinate.setGroupId( plugin.getGroupId() );
+ coordinate.setArtifactId( plugin.getArtifactId() );
+ coordinate.setVersion( plugin.getVersion() );
+
+ return coordinate;
+ }
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/CollectorResult.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/CollectorResult.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/CollectorResult.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/CollectorResult.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,37 @@
+package org.apache.maven.shared.dependencies.collect;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ *
+ * @author Robert Scholte
+ *
+ */
+public interface CollectorResult
+{
+ /**
+ * @return {@link ArtifactRepository}
+ */
+ List<ArtifactRepository> getRemoteRepositories();
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollector.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollector.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollector.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollector.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,24 @@
+package org.apache.maven.shared.dependencies.collect;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.project.ProjectBuildingRequest;
+
+/**
+ * Will only download the pom files when not available, never the artifact.
+ *
+ * @author Robert Scholte
+ *
+ */
+public interface DependencyCollector
+{
+
+ /**
+ * @param buildingRequest {@link ProjectBuildingRequest}
+ * @param root {@link Dependency}
+ * @return {@link CollectorResult}
+ * @throws DependencyCollectorException in case of an error.
+ */
+ CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
+ throws DependencyCollectorException;
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollectorException.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollectorException.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollectorException.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/DependencyCollectorException.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,43 @@
+package org.apache.maven.shared.dependencies.collect;
+
+/*
+ * 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.
+ */
+
+/**
+ *
+ * @author Robert Scholte
+ */
+public class DependencyCollectorException extends Exception
+{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -180986912170441437L;
+
+ /**
+ * @param message The message you would give for the exception.
+ * @param cause The cause which is related to the message.
+ */
+ public DependencyCollectorException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/DefaultDependencyCollector.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/DefaultDependencyCollector.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/DefaultDependencyCollector.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/DefaultDependencyCollector.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,78 @@
+package org.apache.maven.shared.dependencies.collect.internal;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.dependencies.collect.CollectorResult;
+import org.apache.maven.shared.dependencies.collect.DependencyCollector;
+import org.apache.maven.shared.dependencies.collect.DependencyCollectorException;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+
+/**
+ * This DependencyCollector passes the request to the proper Maven 3.x implementation
+ *
+ * @author Robert Scholte
+ */
+@Component( role = DependencyCollector.class, hint = "default" )
+public class DefaultDependencyCollector implements DependencyCollector, Contextualizable
+{
+ private PlexusContainer container;
+
+ @Override
+ public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
+ throws DependencyCollectorException
+ {
+ try
+ {
+ String hint = isMaven31() ? "maven31" : "maven3";
+
+ DependencyCollector effectiveDependencyCollector = container.lookup( DependencyCollector.class, hint );
+
+ return effectiveDependencyCollector.collectDependencies( buildingRequest, root );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+
+ /**
+ * @return true if the current Maven version is Maven 3.1.
+ */
+ protected static boolean isMaven31()
+ {
+ return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
+ }
+
+ private static boolean canFindCoreClass( String className )
+ {
+ try
+ {
+ Thread.currentThread().getContextClassLoader().loadClass( className );
+
+ return true;
+ }
+ catch ( ClassNotFoundException e )
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Injects the Plexus content.
+ *
+ * @param context Plexus context to inject.
+ * @throws ContextException if the PlexusContainer could not be located.
+ */
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+ }
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Invoker.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Invoker.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Invoker.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Invoker.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,165 @@
+package org.apache.maven.shared.dependencies.collect.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.
+ */
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.maven.shared.dependencies.collect.DependencyCollectorException;
+
+/**
+ * Invokes method on objects using reflection.
+ */
+final class Invoker
+{
+ private Invoker()
+ {
+ // do not instantiate
+ }
+
+ public static Object invoke( Object object, String method )
+ throws DependencyCollectorException
+ {
+ return invoke( object.getClass(), object, method );
+ }
+
+ public static Object invoke( Class<?> objectClazz, Object object, String method )
+ throws DependencyCollectorException
+ {
+ try
+ {
+ return objectClazz.getMethod( method ).invoke( object );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+
+ public static Object invoke( Object object, String method, Class<?> argClazz, Object arg )
+ throws DependencyCollectorException
+ {
+ try
+ {
+ final Class<?> objectClazz = object.getClass();
+ return objectClazz.getMethod( method, argClazz ).invoke( object, arg );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+
+ public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+ throws DependencyCollectorException
+ {
+ try
+ {
+ return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+
+ /**
+ * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements
+ *
+ * @param objectClazz the class of the static method
+ * @param staticMethod the static method to call
+ * @param argClasses the classes of the argument, used to select the right static method
+ * @param args the actual arguments to be passed
+ * @return the result of the method invocation
+ * @throws DependencyCollectorException if any checked exception occurs
+ */
+ public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
+ throws DependencyCollectorException
+ {
+ try
+ {
+ return objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+
+ public static Object newInstance( Class<?> objectClazz, Class<?> argClazz, Object arg )
+ throws DependencyCollectorException
+ {
+ try
+ {
+ return objectClazz.getConstructor( argClazz ).newInstance( arg );
+ }
+ catch ( InstantiationException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( IllegalArgumentException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30ArtifactRepositoryAdapter.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,266 @@
+package org.apache.maven.shared.dependencies.collect.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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.Authentication;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.repository.Proxy;
+import org.sonatype.aether.repository.RemoteRepository;
+import org.sonatype.aether.repository.RepositoryPolicy;
+
+/**
+ * ArtifactRepository wrapper around {@link RemoteRepository}
+ *
+ * @author Robert Scholte
+ *
+ */
+public class Maven30ArtifactRepositoryAdapter implements ArtifactRepository
+{
+
+ private RemoteRepository remoteRepository;
+
+ /**
+ * @param remoteRepository {@link RemoteRepository}
+ */
+ public Maven30ArtifactRepositoryAdapter( RemoteRepository remoteRepository )
+ {
+ this.remoteRepository = remoteRepository;
+ }
+
+ @Override
+ public String pathOf( Artifact artifact )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getUrl()
+ {
+ return remoteRepository.getUrl();
+ }
+
+ @Override
+ public void setUrl( String url )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getBasedir()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getProtocol()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getId()
+ {
+ return remoteRepository.getId();
+ }
+
+ @Override
+ public void setId( String id )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ArtifactRepositoryPolicy getSnapshots()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ArtifactRepositoryPolicy getReleases()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ArtifactRepositoryLayout getLayout()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setLayout( ArtifactRepositoryLayout layout )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getKey()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isUniqueVersion()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isBlacklisted()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setBlacklisted( boolean blackListed )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Artifact find( Artifact artifact )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<String> findVersions( Artifact artifact )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isProjectAware()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setAuthentication( Authentication authentication )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Authentication getAuthentication()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setProxy( Proxy proxy )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Proxy getProxy()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( " id: " ).append( getId() ).append( "\n" );
+ sb.append( " url: " ).append( getUrl() ).append( "\n" );
+ sb.append( " layout: " ).append( "default" ).append( "\n" );
+
+ RepositoryPolicy snapshotPolicy = remoteRepository.getPolicy( true );
+ sb.append( "snapshots: [enabled => " ).append( snapshotPolicy.isEnabled() );
+ sb.append( ", update => " ).append( snapshotPolicy.getUpdatePolicy() ).append( "]\n" );
+
+ RepositoryPolicy releasePolicy = remoteRepository.getPolicy( false );
+ sb.append( " releases: [enabled => " ).append( releasePolicy.isEnabled() );
+ sb.append( ", update => " ).append( releasePolicy.getUpdatePolicy() ).append( "]\n" );
+
+ return sb.toString();
+ }
+
+
+ @Override
+ public int hashCode()
+ {
+ return remoteRepository.hashCode();
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+ if ( obj == null )
+ {
+ return false;
+ }
+ if ( getClass() != obj.getClass() )
+ {
+ return false;
+ }
+
+ Maven30ArtifactRepositoryAdapter other = (Maven30ArtifactRepositoryAdapter) obj;
+ if ( remoteRepository == null )
+ {
+ if ( other.remoteRepository != null )
+ {
+ return false;
+ }
+ }
+ else if ( !remoteRepository.equals( other.remoteRepository ) )
+ {
+ return false;
+ }
+ return true;
+ }
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30CollectorResult.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30CollectorResult.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30CollectorResult.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30CollectorResult.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,85 @@
+package org.apache.maven.shared.dependencies.collect.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.
+ */
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.shared.dependencies.collect.CollectorResult;
+import org.sonatype.aether.collection.CollectResult;
+import org.sonatype.aether.graph.DependencyNode;
+import org.sonatype.aether.graph.DependencyVisitor;
+import org.sonatype.aether.repository.RemoteRepository;
+
+/**
+ * CollectorResult wrapper around {@link CollectResult}
+ *
+ * @author Robert Scholte
+ *
+ */
+public class Maven30CollectorResult implements CollectorResult
+{
+ private final CollectResult collectResult;
+
+ /**
+ * @param collectResult {@link CollectorResult}
+ */
+ public Maven30CollectorResult( CollectResult collectResult )
+ {
+ this.collectResult = collectResult;
+ }
+
+ @Override
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ final Set<RemoteRepository> aetherRepositories = new HashSet<RemoteRepository>();
+
+ DependencyVisitor visitor = new DependencyVisitor()
+ {
+ @Override
+ public boolean visitEnter( DependencyNode node )
+ {
+ aetherRepositories.addAll( node.getRepositories() );
+ return true;
+ }
+
+ @Override
+ public boolean visitLeave( DependencyNode node )
+ {
+ return true;
+ }
+ };
+
+ collectResult.getRoot().accept( visitor );
+
+ List<ArtifactRepository> mavenRepositories = new ArrayList<ArtifactRepository>( aetherRepositories.size() );
+
+ for ( RemoteRepository aetherRepository : aetherRepositories )
+ {
+ mavenRepositories.add( new Maven30ArtifactRepositoryAdapter( aetherRepository ) );
+ }
+
+ return mavenRepositories;
+ }
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30DependencyCollector.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30DependencyCollector.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30DependencyCollector.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven30DependencyCollector.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,97 @@
+package org.apache.maven.shared.dependencies.collect.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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.dependencies.collect.CollectorResult;
+import org.apache.maven.shared.dependencies.collect.DependencyCollector;
+import org.apache.maven.shared.dependencies.collect.DependencyCollectorException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.sonatype.aether.RepositorySystem;
+import org.sonatype.aether.RepositorySystemSession;
+import org.sonatype.aether.artifact.ArtifactTypeRegistry;
+import org.sonatype.aether.collection.CollectRequest;
+import org.sonatype.aether.collection.DependencyCollectionException;
+import org.sonatype.aether.graph.Dependency;
+import org.sonatype.aether.repository.RemoteRepository;
+
+/**
+ * Maven 3.0 implementation of the {@link DependencyCollector}
+ *
+ * @author Robert Scholte
+ *
+ */
+@Component( role = DependencyCollector.class, hint = "maven3" )
+public class Maven30DependencyCollector
+ implements DependencyCollector
+{
+ @Requirement
+ private RepositorySystem repositorySystem;
+
+ @Requirement
+ private ArtifactHandlerManager artifactHandlerManager;
+
+ @Override
+ public CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest,
+ org.apache.maven.model.Dependency root )
+ throws DependencyCollectorException
+ {
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+
+ Class<?>[] argClasses = new Class<?>[] { Dependency.class, ArtifactTypeRegistry.class };
+ Object[] args = new Object[] { root, typeRegistry };
+ Dependency aetherRoot = (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+
+ return collectDependencies( buildingRequest, aetherRoot );
+ }
+
+ private CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest, Dependency aetherRoot )
+ throws DependencyCollectorException
+ {
+ RepositorySystemSession session =
+ (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+
+ CollectRequest request = new CollectRequest();
+ request.setRoot( aetherRoot );
+
+ @SuppressWarnings( "unchecked" )
+ List<RemoteRepository> aetherRepositories =
+ (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
+ buildingRequest.getRemoteRepositories() );
+ request.setRepositories( aetherRepositories );
+
+ try
+ {
+ return new Maven30CollectorResult( repositorySystem.collectDependencies( session, request ) );
+ }
+ catch ( DependencyCollectionException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31ArtifactRepositoryAdapter.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,266 @@
+package org.apache.maven.shared.dependencies.collect.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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.Authentication;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.repository.Proxy;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.RepositoryPolicy;
+
+/**
+ * ArtifactRepository wrapper around {@link RemoteRepository}
+ *
+ * @author Robert Scholte
+ *
+ */
+public class Maven31ArtifactRepositoryAdapter implements ArtifactRepository
+{
+
+ private RemoteRepository remoteRepository;
+
+ /**
+ * @param remoteRepository {@link RemoteRepository}
+ */
+ public Maven31ArtifactRepositoryAdapter( RemoteRepository remoteRepository )
+ {
+ this.remoteRepository = remoteRepository;
+ }
+
+ @Override
+ public String pathOf( Artifact artifact )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getUrl()
+ {
+ return remoteRepository.getUrl();
+ }
+
+ @Override
+ public void setUrl( String url )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getBasedir()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getProtocol()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getId()
+ {
+ return remoteRepository.getId();
+ }
+
+ @Override
+ public void setId( String id )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ArtifactRepositoryPolicy getSnapshots()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ArtifactRepositoryPolicy getReleases()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public ArtifactRepositoryLayout getLayout()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setLayout( ArtifactRepositoryLayout layout )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getKey()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isUniqueVersion()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isBlacklisted()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setBlacklisted( boolean blackListed )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Artifact find( Artifact artifact )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public List<String> findVersions( Artifact artifact )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isProjectAware()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setAuthentication( Authentication authentication )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Authentication getAuthentication()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void setProxy( Proxy proxy )
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Proxy getProxy()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( " id: " ).append( getId() ).append( "\n" );
+ sb.append( " url: " ).append( getUrl() ).append( "\n" );
+ sb.append( " layout: " ).append( "default" ).append( "\n" );
+
+ RepositoryPolicy snapshotPolicy = remoteRepository.getPolicy( true );
+ sb.append( "snapshots: [enabled => " ).append( snapshotPolicy.isEnabled() );
+ sb.append( ", update => " ).append( snapshotPolicy.getUpdatePolicy() ).append( "]\n" );
+
+ RepositoryPolicy releasePolicy = remoteRepository.getPolicy( false );
+ sb.append( " releases: [enabled => " ).append( releasePolicy.isEnabled() );
+ sb.append( ", update => " ).append( releasePolicy.getUpdatePolicy() ).append( "]\n" );
+
+ return sb.toString();
+ }
+
+
+ @Override
+ public int hashCode()
+ {
+ return remoteRepository.hashCode();
+ }
+
+ @Override
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+ if ( obj == null )
+ {
+ return false;
+ }
+ if ( getClass() != obj.getClass() )
+ {
+ return false;
+ }
+
+ Maven31ArtifactRepositoryAdapter other = (Maven31ArtifactRepositoryAdapter) obj;
+ if ( remoteRepository == null )
+ {
+ if ( other.remoteRepository != null )
+ {
+ return false;
+ }
+ }
+ else if ( !remoteRepository.equals( other.remoteRepository ) )
+ {
+ return false;
+ }
+ return true;
+ }
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31CollectorResult.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31CollectorResult.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31CollectorResult.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31CollectorResult.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,85 @@
+package org.apache.maven.shared.dependencies.collect.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.
+ */
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.shared.dependencies.collect.CollectorResult;
+import org.eclipse.aether.collection.CollectResult;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.DependencyVisitor;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * CollectorResult wrapper around {@link CollectResult}
+ *
+ * @author Robert Scholte
+ *
+ */
+public class Maven31CollectorResult implements CollectorResult
+{
+ private final CollectResult collectResult;
+
+ /**
+ * @param collectResult {@link CollectorResult}
+ */
+ public Maven31CollectorResult( CollectResult collectResult )
+ {
+ this.collectResult = collectResult;
+ }
+
+ @Override
+ public List<ArtifactRepository> getRemoteRepositories()
+ {
+ final Set<RemoteRepository> aetherRepositories = new HashSet<RemoteRepository>();
+
+ DependencyVisitor visitor = new DependencyVisitor()
+ {
+ @Override
+ public boolean visitEnter( DependencyNode node )
+ {
+ aetherRepositories.addAll( node.getRepositories() );
+ return true;
+ }
+
+ @Override
+ public boolean visitLeave( DependencyNode node )
+ {
+ return true;
+ }
+ };
+
+ collectResult.getRoot().accept( visitor );
+
+ List<ArtifactRepository> mavenRepositories = new ArrayList<ArtifactRepository>( aetherRepositories.size() );
+
+ for ( RemoteRepository aetherRepository : aetherRepositories )
+ {
+ mavenRepositories.add( new Maven31ArtifactRepositoryAdapter( aetherRepository ) );
+ }
+
+ return mavenRepositories;
+ }
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31DependencyCollector.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31DependencyCollector.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31DependencyCollector.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/collect/internal/Maven31DependencyCollector.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,78 @@
+package org.apache.maven.shared.dependencies.collect.internal;
+
+import java.util.List;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.dependencies.collect.CollectorResult;
+import org.apache.maven.shared.dependencies.collect.DependencyCollector;
+import org.apache.maven.shared.dependencies.collect.DependencyCollectorException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.repository.RemoteRepository;
+
+/**
+ * Maven 3.1+ implementation of the {@link DependencyCollector}
+ *
+ * @author Robert Scholte
+ *
+ */
+@Component( role = DependencyCollector.class, hint = "maven31" )
+public class Maven31DependencyCollector
+ implements DependencyCollector
+{
+ @Requirement
+ private RepositorySystem repositorySystem;
+
+ @Requirement
+ private ArtifactHandlerManager artifactHandlerManager;
+
+ @Override
+ public CollectorResult collectDependencies( final ProjectBuildingRequest buildingRequest,
+ org.apache.maven.model.Dependency root )
+ throws DependencyCollectorException
+ {
+ ArtifactTypeRegistry typeRegistry =
+ (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
+ ArtifactHandlerManager.class, artifactHandlerManager );
+
+ Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
+ Object[] args = new Object[] { root, typeRegistry };
+ Dependency aetherRoot = (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
+
+ return collectDependencies( buildingRequest, aetherRoot );
+ }
+
+ private CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency aetherRoot )
+ throws DependencyCollectorException
+ {
+ CollectRequest request = new CollectRequest();
+ request.setRoot( aetherRoot );
+
+ RepositorySystemSession session =
+ (RepositorySystemSession) Invoker.invoke( buildingRequest, "getRepositorySession" );
+
+ @SuppressWarnings( "unchecked" )
+ List<RemoteRepository> aetherRepositories =
+ (List<RemoteRepository>) Invoker.invoke( RepositoryUtils.class, "toRepos", List.class,
+ buildingRequest.getRemoteRepositories() );
+ request.setRepositories( aetherRepositories );
+
+ try
+ {
+ return new Maven31CollectorResult( repositorySystem.collectDependencies( session, request ) );
+ }
+ catch ( DependencyCollectionException e )
+ {
+ throw new DependencyCollectorException( e.getMessage(), e );
+ }
+ }
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolver.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolver.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolver.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolver.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,63 @@
+package org.apache.maven.shared.dependencies.resolve;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.apache.maven.shared.artifact.resolve.ArtifactResult;
+import org.apache.maven.shared.dependencies.DependableCoordinate;
+
+/**
+ *
+ */
+public interface DependencyResolver
+{
+ /**
+ * This will resolve the dependencies of the coordinate, not resolving the the artifact of the coordinate itself.
+ * If the coordinate needs to be resolved too, use
+ * {@link #resolveDependencies(ProjectBuildingRequest, Collection, Collection, TransformableFilter)} passing
+ * {@code Collections.singletonList(coordinate)}
+ *
+ * @param buildingRequest {@link ProjectBuildingRequest}
+ * @param coordinate {@link DependableCoordinate}
+ * @param filter {@link TransformableFilter}
+ * @return the resolved dependencies.
+ * @throws DependencyResolverException in case of an error.
+ */
+ Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ DependableCoordinate coordinate,
+ TransformableFilter filter ) throws DependencyResolverException;
+
+ /**
+ * @param buildingRequest the project building request, never {@code null}
+ * @param dependencies the dependencies to resolve, can be {@code null}
+ * @param managedDependencies managed dependencies, can be {@code null}
+ * @param filter a filter, can be {@code null}
+ * @return the resolved dependencies.
+ * @throws DependencyResolverException in case of an error.
+ */
+ Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ Collection<Dependency> dependencies,
+ Collection<Dependency> managedDependencies,
+ TransformableFilter filter ) throws DependencyResolverException;
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolverException.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolverException.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolverException.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/DependencyResolverException.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,43 @@
+package org.apache.maven.shared.dependencies.resolve;
+
+/*
+ * 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.
+ */
+
+/**
+ *
+ */
+public class DependencyResolverException
+ extends Exception
+{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8971449574933775007L;
+
+ /**
+ * @param message The message for the exception.
+ * @param e The exception itself.
+ */
+ public DependencyResolverException( String message, Exception e )
+ {
+ super( message, e );
+ }
+
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/DefaultDependencyResolver.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/DefaultDependencyResolver.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/DefaultDependencyResolver.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/DefaultDependencyResolver.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,121 @@
+package org.apache.maven.shared.dependencies.resolve.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.
+ */
+
+import java.util.Collection;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
+import org.apache.maven.shared.artifact.resolve.ArtifactResult;
+import org.apache.maven.shared.dependencies.DependableCoordinate;
+import org.apache.maven.shared.dependencies.resolve.DependencyResolver;
+import org.apache.maven.shared.dependencies.resolve.DependencyResolverException;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+
+/**
+ *
+ */
+@Component( role = DependencyResolver.class, hint = "default" )
+public class DefaultDependencyResolver
+ implements DependencyResolver, Contextualizable
+{
+ private PlexusContainer container;
+
+ @Override
+ public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ Collection<Dependency> coordinates,
+ Collection<Dependency> managedDependencies,
+ TransformableFilter filter )
+ throws DependencyResolverException
+ {
+ try
+ {
+ String hint = isMaven31() ? "maven31" : "maven3";
+
+ DependencyResolver effectiveArtifactResolver = container.lookup( DependencyResolver.class, hint );
+
+ return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinates, null, filter );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ }
+
+ @Override
+ public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
+ DependableCoordinate coordinate, TransformableFilter filter )
+ throws DependencyResolverException
+ {
+ try
+ {
+ String hint = isMaven31() ? "maven31" : "maven3";
+
+ DependencyResolver effectiveArtifactResolver = container.lookup( DependencyResolver.class, hint );
+
+ return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinate, filter );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ }
+
+ /**
+ * @return true if the current Maven version is Maven 3.1.
+ */
+ protected static boolean isMaven31()
+ {
+ return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" ); // Maven 3.1 specific
+ }
+
+ private static boolean canFindCoreClass( String className )
+ {
+ try
+ {
+ Thread.currentThread().getContextClassLoader().loadClass( className );
+
+ return true;
+ }
+ catch ( ClassNotFoundException e )
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Injects the Plexus content.
+ *
+ * @param context Plexus context to inject.
+ * @throws ContextException if the PlexusContainer could not be located.
+ */
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+ }
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Invoker.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Invoker.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Invoker.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Invoker.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,136 @@
+package org.apache.maven.shared.dependencies.resolve.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.
+ */
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.maven.shared.dependencies.resolve.DependencyResolverException;
+
+/**
+ * Invokes method on objects using reflection.
+ */
+final class Invoker
+{
+ private Invoker()
+ {
+ // do not instantiate
+ }
+
+ public static Object invoke( Object object, String method )
+ throws DependencyResolverException
+ {
+ return invoke( object.getClass(), object, method );
+ }
+
+ public static Object invoke( Class<?> objectClazz, Object object, String method )
+ throws DependencyResolverException
+ {
+ try
+ {
+ return objectClazz.getMethod( method ).invoke( object );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ }
+
+ public static Object invoke( Object object, String method, Class<?> argClazz, Object arg )
+ throws DependencyResolverException
+ {
+ try
+ {
+ final Class<?> objectClazz = object.getClass();
+ return objectClazz.getMethod( method, argClazz ).invoke( object, arg );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ }
+
+ public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?> argClazz, Object arg )
+ throws DependencyResolverException
+ {
+ try
+ {
+ return objectClazz.getMethod( staticMethod, argClazz ).invoke( null, arg );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ }
+
+ /**
+ * <strong>Note:</strong> Ensure that argClasses and args have the same number of elements
+ *
+ * @param objectClazz the class of the static method
+ * @param staticMethod the static method to call
+ * @param argClasses the classes of the argument, used to select the right static method
+ * @param args the actual arguments to be passed
+ * @return the result of the method invocation
+ * @throws ArtifactResolverException if any checked exception occurs
+ */
+ public static Object invoke( Class<?> objectClazz, String staticMethod, Class<?>[] argClasses, Object[] args )
+ throws DependencyResolverException
+ {
+ try
+ {
+ return objectClazz.getMethod( staticMethod, argClasses ).invoke( null, args );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ catch ( InvocationTargetException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ catch ( NoSuchMethodException e )
+ {
+ throw new DependencyResolverException( e.getMessage(), e );
+ }
+ }
+}
Added: maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30ArtifactResult.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30ArtifactResult.java?rev=1747984&view=auto
==============================================================================
--- maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30ArtifactResult.java (added)
+++ maven/shared/trunk/maven-artifact-transfer/src/main/java/org/apache/maven/shared/dependencies/resolve/internal/Maven30ArtifactResult.java Sun Jun 12 12:02:29 2016
@@ -0,0 +1,59 @@
+package org.apache.maven.shared.dependencies.resolve.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.
+ */
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.shared.dependencies.resolve.DependencyResolverException;
+import org.sonatype.aether.artifact.Artifact;
+import org.sonatype.aether.resolution.ArtifactResult;
+
+/**
+ * {@link org.apache.maven.shared.artifact.resolve.ArtifactResult} wrapper for {@link ArtifactResult}
+ *
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public class Maven30ArtifactResult
+ implements org.apache.maven.shared.artifact.resolve.ArtifactResult
+{
+ private final ArtifactResult artifactResult;
+
+ /**
+ * @param artifactResult {@link ArtifactResult}
+ */
+ public Maven30ArtifactResult( ArtifactResult artifactResult )
+ {
+ this.artifactResult = artifactResult;
+ }
+
+ @Override
+ public org.apache.maven.artifact.Artifact getArtifact()
+ {
+ try
+ {
+ return (org.apache.maven.artifact.Artifact) Invoker.invoke( RepositoryUtils.class, "toArtifact",
+ Artifact.class, artifactResult.getArtifact() );
+ }
+ catch ( DependencyResolverException e )
+ {
+ throw new RuntimeException( e );
+ }
+ }
+}