aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java256
1 files changed, 256 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
new file mode 100644
index 00000000..5b0c2712
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java
@@ -0,0 +1,256 @@
+package org.apache.maven.plugin.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.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.plugin.PluginResolutionException;
+import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.logging.Logger;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.collection.DependencyGraphTransformer;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.graph.DependencyFilter;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.DependencyVisitor;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactDescriptorException;
+import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
+import org.eclipse.aether.resolution.ArtifactDescriptorResult;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResolutionException;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResolutionException;
+import org.eclipse.aether.util.artifact.JavaScopes;
+import org.eclipse.aether.util.filter.AndDependencyFilter;
+import org.eclipse.aether.util.filter.ScopeDependencyFilter;
+import org.eclipse.aether.util.graph.selector.AndDependencySelector;
+import org.eclipse.aether.util.graph.transformer.ChainedDependencyGraphTransformer;
+import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy;
+
+/**
+ * Assists in resolving the dependencies of a plugin. <strong>Warning:</strong> This is an internal utility class that
+ * is only public for technical reasons, it is not part of the public API. In particular, this class can be changed or
+ * deleted without prior notice.
+ *
+ * @since 3.0
+ * @author Benjamin Bentmann
+ */
+@Component( role = PluginDependenciesResolver.class )
+public class DefaultPluginDependenciesResolver
+ implements PluginDependenciesResolver
+{
+
+ private static final String REPOSITORY_CONTEXT = "plugin";
+
+ @Requirement
+ private Logger logger;
+
+ @Requirement
+ private RepositorySystem repoSystem;
+
+ private Artifact toArtifact( Plugin plugin, RepositorySystemSession session )
+ {
+ return new DefaultArtifact( plugin.getGroupId(), plugin.getArtifactId(), null, "jar", plugin.getVersion(),
+ session.getArtifactTypeRegistry().get( "maven-plugin" ) );
+ }
+
+ public Artifact resolve( Plugin plugin, List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException
+ {
+ RequestTrace trace = RequestTrace.newChild( null, plugin );
+
+ Artifact pluginArtifact = toArtifact( plugin, session );
+
+ try
+ {
+ DefaultRepositorySystemSession pluginSession = new DefaultRepositorySystemSession( session );
+ pluginSession.setArtifactDescriptorPolicy( new SimpleArtifactDescriptorPolicy( true, false ) );
+
+ ArtifactDescriptorRequest request =
+ new ArtifactDescriptorRequest( pluginArtifact, repositories, REPOSITORY_CONTEXT );
+ request.setTrace( trace );
+ ArtifactDescriptorResult result = repoSystem.readArtifactDescriptor( pluginSession, request );
+
+ pluginArtifact = result.getArtifact();
+
+ String requiredMavenVersion = (String) result.getProperties().get( "prerequisites.maven" );
+ if ( requiredMavenVersion != null )
+ {
+ Map<String, String> props = new LinkedHashMap<String, String>( pluginArtifact.getProperties() );
+ props.put( "requiredMavenVersion", requiredMavenVersion );
+ pluginArtifact = pluginArtifact.setProperties( props );
+ }
+ }
+ catch ( ArtifactDescriptorException e )
+ {
+ throw new PluginResolutionException( plugin, e );
+ }
+
+ try
+ {
+ ArtifactRequest request = new ArtifactRequest( pluginArtifact, repositories, REPOSITORY_CONTEXT );
+ request.setTrace( trace );
+ pluginArtifact = repoSystem.resolveArtifact( session, request ).getArtifact();
+ }
+ catch ( ArtifactResolutionException e )
+ {
+ throw new PluginResolutionException( plugin, e );
+ }
+
+ return pluginArtifact;
+ }
+
+ /**
+ * @since 3.3.0
+ */
+ public DependencyNode resolveCoreExtension( Plugin plugin, DependencyFilter dependencyFilter,
+ List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException
+ {
+ return resolveInternal( plugin, null /* pluginArtifact */, dependencyFilter, null /* transformer */,
+ repositories, session );
+ }
+
+ public DependencyNode resolve( Plugin plugin, Artifact pluginArtifact, DependencyFilter dependencyFilter,
+ List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException
+ {
+ return resolveInternal( plugin, pluginArtifact, dependencyFilter, new PlexusUtilsInjector(), repositories,
+ session );
+ }
+
+ private DependencyNode resolveInternal( Plugin plugin, Artifact pluginArtifact, DependencyFilter dependencyFilter,
+ DependencyGraphTransformer transformer,
+ List<RemoteRepository> repositories, RepositorySystemSession session )
+ throws PluginResolutionException
+ {
+ RequestTrace trace = RequestTrace.newChild( null, plugin );
+
+ if ( pluginArtifact == null )
+ {
+ pluginArtifact = toArtifact( plugin, session );
+ }
+
+ DependencyFilter collectionFilter = new ScopeDependencyFilter( "provided", "test" );
+ DependencyFilter resolutionFilter = AndDependencyFilter.newInstance( collectionFilter, dependencyFilter );
+
+ DependencyNode node;
+
+ try
+ {
+ DependencySelector selector =
+ AndDependencySelector.newInstance( session.getDependencySelector(), new WagonExcluder() );
+
+ transformer =
+ ChainedDependencyGraphTransformer.newInstance( session.getDependencyGraphTransformer(), transformer );
+
+ DefaultRepositorySystemSession pluginSession = new DefaultRepositorySystemSession( session );
+ pluginSession.setDependencySelector( selector );
+ pluginSession.setDependencyGraphTransformer( transformer );
+
+ CollectRequest request = new CollectRequest();
+ request.setRequestContext( REPOSITORY_CONTEXT );
+ request.setRepositories( repositories );
+ request.setRoot( new org.eclipse.aether.graph.Dependency( pluginArtifact, null ) );
+ for ( Dependency dependency : plugin.getDependencies() )
+ {
+ org.eclipse.aether.graph.Dependency pluginDep =
+ RepositoryUtils.toDependency( dependency, session.getArtifactTypeRegistry() );
+ if ( !JavaScopes.SYSTEM.equals( pluginDep.getScope() ) )
+ {
+ pluginDep = pluginDep.setScope( JavaScopes.RUNTIME );
+ }
+ request.addDependency( pluginDep );
+ }
+
+ DependencyRequest depRequest = new DependencyRequest( request, resolutionFilter );
+ depRequest.setTrace( trace );
+
+ request.setTrace( RequestTrace.newChild( trace, depRequest ) );
+
+ node = repoSystem.collectDependencies( pluginSession, request ).getRoot();
+
+ if ( logger.isDebugEnabled() )
+ {
+ node.accept( new GraphLogger() );
+ }
+
+ depRequest.setRoot( node );
+ repoSystem.resolveDependencies( session, depRequest );
+ }
+ catch ( DependencyCollectionException e )
+ {
+ throw new PluginResolutionException( plugin, e );
+ }
+ catch ( DependencyResolutionException e )
+ {
+ throw new PluginResolutionException( plugin, e.getCause() );
+ }
+
+ return node;
+ }
+
+ class GraphLogger
+ implements DependencyVisitor
+ {
+
+ private String indent = "";
+
+ public boolean visitEnter( DependencyNode node )
+ {
+ StringBuilder buffer = new StringBuilder( 128 );
+ buffer.append( indent );
+ org.eclipse.aether.graph.Dependency dep = node.getDependency();
+ if ( dep != null )
+ {
+ Artifact art = dep.getArtifact();
+
+ buffer.append( art );
+ buffer.append( ':' ).append( dep.getScope() );
+ }
+
+ logger.debug( buffer.toString() );
+ indent += " ";
+ return true;
+ }
+
+ public boolean visitLeave( DependencyNode node )
+ {
+ indent = indent.substring( 0, indent.length() - 3 );
+ return true;
+ }
+
+ }
+
+}