1 package org.apache.maven.shared.transfer.dependencies.resolve.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.Collection;
23 import java.util.List;
24
25 import org.apache.maven.RepositoryUtils;
26 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
27 import org.apache.maven.model.Dependency;
28 import org.apache.maven.model.Model;
29 import org.apache.maven.project.ProjectBuildingRequest;
30 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
31 import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResult;
32 import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
33 import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver;
34 import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolverException;
35 import org.codehaus.plexus.PlexusConstants;
36 import org.codehaus.plexus.PlexusContainer;
37 import org.codehaus.plexus.component.annotations.Component;
38 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
39 import org.codehaus.plexus.context.Context;
40 import org.codehaus.plexus.context.ContextException;
41 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
42
43
44
45
46 @Component( role = DependencyResolver.class, hint = "default" )
47 class DefaultDependencyResolver implements DependencyResolver, Contextualizable
48 {
49 private PlexusContainer container;
50
51 @Override
52 public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
53 Collection<Dependency> coordinates, Collection<Dependency> managedDependencies, TransformableFilter filter )
54 throws DependencyResolverException
55 {
56 validateBuildingRequest( buildingRequest );
57
58 try
59 {
60 return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinates, managedDependencies,
61 filter );
62 }
63 catch ( ComponentLookupException e )
64 {
65 throw new DependencyResolverException( e.getMessage(), e );
66 }
67 }
68
69 @Override
70 public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
71 DependableCoordinate coordinate, TransformableFilter filter ) throws DependencyResolverException
72 {
73 validateParameters( buildingRequest, coordinate );
74 try
75 {
76 return getMavenDependencyResolver( buildingRequest ).resolveDependencies( coordinate, filter );
77 }
78 catch ( ComponentLookupException e )
79 {
80 throw new DependencyResolverException( e.getMessage(), e );
81 }
82 }
83
84 @Override
85 public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest, Model model,
86 TransformableFilter filter ) throws DependencyResolverException
87 {
88 validateParameters( buildingRequest, model );
89 try
90 {
91 return getMavenDependencyResolver( buildingRequest ).resolveDependencies( model, filter );
92 }
93 catch ( ComponentLookupException e )
94 {
95 throw new DependencyResolverException( e.getMessage(), e );
96 }
97 }
98
99
100
101
102 private boolean isMaven31()
103 {
104 try
105 {
106
107 Thread.currentThread().getContextClassLoader().loadClass( "org.eclipse.aether.artifact.Artifact" );
108 return true;
109 }
110 catch ( ClassNotFoundException e )
111 {
112 return false;
113 }
114 }
115
116
117
118
119
120
121
122 public void contextualize( Context context ) throws ContextException
123 {
124 container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
125 }
126
127 private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate coordinate )
128 {
129 validateBuildingRequest( buildingRequest );
130 if ( coordinate == null )
131 {
132 throw new IllegalArgumentException( "The parameter coordinate is not allowed to be null." );
133 }
134 }
135
136 private void validateParameters( ProjectBuildingRequest buildingRequest, Model model )
137 {
138 validateBuildingRequest( buildingRequest );
139 if ( model == null )
140 {
141 throw new IllegalArgumentException( "The parameter model is not allowed to be null." );
142 }
143
144 }
145
146 private MavenDependencyResolver getMavenDependencyResolver( ProjectBuildingRequest buildingRequest )
147 throws ComponentLookupException, DependencyResolverException
148 {
149 ArtifactHandlerManager artifactHandlerManager = container.lookup( ArtifactHandlerManager.class );
150
151 if ( isMaven31() )
152 {
153 org.eclipse.aether.RepositorySystem m31RepositorySystem = container.lookup(
154 org.eclipse.aether.RepositorySystem.class );
155
156 org.eclipse.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
157 "getRepositorySession" );
158
159 List<org.eclipse.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
160 RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
161
162 return new Maven31DependencyResolver( m31RepositorySystem, artifactHandlerManager, session,
163 aetherRepositories );
164 }
165 else
166 {
167 org.sonatype.aether.RepositorySystem m30RepositorySystem = container.lookup(
168 org.sonatype.aether.RepositorySystem.class );
169
170 org.sonatype.aether.RepositorySystemSession session = Invoker.invoke( buildingRequest,
171 "getRepositorySession" );
172
173 List<org.sonatype.aether.repository.RemoteRepository> aetherRepositories = Invoker.invoke(
174 RepositoryUtils.class, "toRepos", List.class, buildingRequest.getRemoteRepositories() );
175
176 return new Maven30DependencyResolver( m30RepositorySystem, artifactHandlerManager, session,
177 aetherRepositories );
178
179 }
180 }
181
182 private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
183 {
184 if ( buildingRequest == null )
185 {
186 throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
187 }
188 }
189
190 }