1 package org.apache.maven.shared.transfer.dependencies.collect.internal;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.apache.maven.RepositoryUtils;
26 import org.apache.maven.artifact.handler.ArtifactHandler;
27 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
28 import org.apache.maven.model.Model;
29 import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
30 import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
31 import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
32 import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
33 import org.eclipse.aether.RepositorySystem;
34 import org.eclipse.aether.RepositorySystemSession;
35 import org.eclipse.aether.artifact.Artifact;
36 import org.eclipse.aether.artifact.ArtifactTypeRegistry;
37 import org.eclipse.aether.artifact.DefaultArtifact;
38 import org.eclipse.aether.collection.CollectRequest;
39 import org.eclipse.aether.collection.DependencyCollectionException;
40 import org.eclipse.aether.graph.Dependency;
41 import org.eclipse.aether.repository.RemoteRepository;
42
43
44
45
46
47
48
49 class Maven31DependencyCollector
50 implements MavenDependencyCollector
51 {
52 private final RepositorySystem repositorySystem;
53
54 private final ArtifactHandlerManager artifactHandlerManager;
55
56 private final RepositorySystemSession session;
57
58 private final List<RemoteRepository> aetherRepositories;
59
60 Maven31DependencyCollector( RepositorySystem repositorySystem, ArtifactHandlerManager artifactHandlerManager,
61 RepositorySystemSession session, List<RemoteRepository> aetherRepositories )
62 {
63 super();
64 this.repositorySystem = repositorySystem;
65 this.artifactHandlerManager = artifactHandlerManager;
66 this.session = session;
67 this.aetherRepositories = aetherRepositories;
68 }
69
70 @Override
71 public CollectorResult collectDependencies( org.apache.maven.model.Dependency root )
72 throws DependencyCollectorException
73 {
74 ArtifactTypeRegistry typeRegistry =
75 (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
76 ArtifactHandlerManager.class, artifactHandlerManager );
77
78 CollectRequest request = new CollectRequest();
79 request.setRoot( toDependency( root, typeRegistry ) );
80
81 return collectDependencies( request );
82 }
83
84 @Override
85 public CollectorResult collectDependencies( DependableCoordinate root )
86 throws DependencyCollectorException
87 {
88 ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getType() );
89
90 String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
91
92 Artifact aetherArtifact = new DefaultArtifact( root.getGroupId(), root.getArtifactId(), root.getClassifier(),
93 extension, root.getVersion() );
94
95 CollectRequest request = new CollectRequest();
96 request.setRoot( new Dependency( aetherArtifact, null ) );
97
98 return collectDependencies( request );
99 }
100
101 @Override
102 public CollectorResult collectDependencies( Model root )
103 throws DependencyCollectorException
104 {
105
106 ArtifactHandler artifactHandler = artifactHandlerManager.getArtifactHandler( root.getPackaging() );
107
108 String extension = artifactHandler != null ? artifactHandler.getExtension() : null;
109
110 Artifact aetherArtifact =
111 new DefaultArtifact( root.getGroupId(), root.getArtifactId(), extension, root.getVersion() );
112
113 CollectRequest request = new CollectRequest();
114 request.setRoot( new Dependency( aetherArtifact, null ) );
115
116 ArtifactTypeRegistry typeRegistry =
117 (ArtifactTypeRegistry) Invoker.invoke( RepositoryUtils.class, "newArtifactTypeRegistry",
118 ArtifactHandlerManager.class, artifactHandlerManager );
119
120 List<Dependency> aetherDependencies = new ArrayList<Dependency>( root.getDependencies().size() );
121 for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencies() )
122 {
123 aetherDependencies.add( toDependency( mavenDependency, typeRegistry ) );
124 }
125 request.setDependencies( aetherDependencies );
126
127 if ( root.getDependencyManagement() != null )
128 {
129 List<Dependency> aetherManagerDependencies =
130 new ArrayList<Dependency>( root.getDependencyManagement().getDependencies().size() );
131
132 for ( org.apache.maven.model.Dependency mavenDependency : root.getDependencyManagement().getDependencies() )
133 {
134 aetherManagerDependencies.add( toDependency( mavenDependency, typeRegistry ) );
135 }
136
137 request.setManagedDependencies( aetherManagerDependencies );
138 }
139
140 return collectDependencies( request );
141 }
142
143 private CollectorResult collectDependencies( CollectRequest request )
144 throws DependencyCollectorException
145 {
146 request.setRepositories( aetherRepositories );
147
148 try
149 {
150 return new Maven31CollectorResult( repositorySystem.collectDependencies( session, request ) );
151 }
152 catch ( DependencyCollectionException e )
153 {
154 throw new DependencyCollectorException( e.getMessage(), e );
155 }
156 }
157
158 private static Dependency toDependency( org.apache.maven.model.Dependency root, ArtifactTypeRegistry typeRegistry )
159 throws DependencyCollectorException
160 {
161 Class<?>[] argClasses = new Class<?>[] { org.apache.maven.model.Dependency.class, ArtifactTypeRegistry.class };
162
163 Object[] args = new Object[] { root, typeRegistry };
164
165 return (Dependency) Invoker.invoke( RepositoryUtils.class, "toDependency", argClasses, args );
166 }
167 }