1 package org.apache.maven.shared.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
24 import org.apache.maven.model.Dependency;
25 import org.apache.maven.model.Model;
26 import org.apache.maven.project.ProjectBuildingRequest;
27 import org.apache.maven.shared.artifact.filter.resolve.TransformableFilter;
28 import org.apache.maven.shared.artifact.resolve.ArtifactResult;
29 import org.apache.maven.shared.dependencies.DependableCoordinate;
30 import org.apache.maven.shared.dependencies.resolve.DependencyResolver;
31 import org.apache.maven.shared.dependencies.resolve.DependencyResolverException;
32 import org.codehaus.plexus.PlexusConstants;
33 import org.codehaus.plexus.PlexusContainer;
34 import org.codehaus.plexus.component.annotations.Component;
35 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
36 import org.codehaus.plexus.context.Context;
37 import org.codehaus.plexus.context.ContextException;
38 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
39
40
41
42
43 @Component( role = DependencyResolver.class, hint = "default" )
44 public class DefaultDependencyResolver
45 implements DependencyResolver, Contextualizable
46 {
47 private PlexusContainer container;
48
49 @Override
50 public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
51 Collection<Dependency> coordinates,
52 Collection<Dependency> managedDependencies,
53 TransformableFilter filter )
54 throws DependencyResolverException
55 {
56 try
57 {
58 String hint = isMaven31() ? "maven31" : "maven3";
59
60 DependencyResolver effectiveArtifactResolver = container.lookup( DependencyResolver.class, hint );
61
62 return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinates, null, filter );
63 }
64 catch ( ComponentLookupException e )
65 {
66 throw new DependencyResolverException( e.getMessage(), e );
67 }
68 }
69
70 @Override
71 public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
72 DependableCoordinate coordinate, TransformableFilter filter )
73 throws DependencyResolverException
74 {
75 try
76 {
77 String hint = isMaven31() ? "maven31" : "maven3";
78
79 DependencyResolver effectiveArtifactResolver = container.lookup( DependencyResolver.class, hint );
80
81 return effectiveArtifactResolver.resolveDependencies( buildingRequest, coordinate, filter );
82 }
83 catch ( ComponentLookupException e )
84 {
85 throw new DependencyResolverException( e.getMessage(), e );
86 }
87 }
88
89 @Override
90 public Iterable<ArtifactResult> resolveDependencies( ProjectBuildingRequest buildingRequest,
91 Model model, TransformableFilter filter )
92 throws DependencyResolverException
93 {
94 try
95 {
96 String hint = isMaven31() ? "maven31" : "maven3";
97
98 DependencyResolver effectiveArtifactResolver = container.lookup( DependencyResolver.class, hint );
99
100 return effectiveArtifactResolver.resolveDependencies( buildingRequest, model, filter );
101 }
102 catch ( ComponentLookupException e )
103 {
104 throw new DependencyResolverException( e.getMessage(), e );
105 }
106 }
107
108
109
110
111 protected static boolean isMaven31()
112 {
113 return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" );
114 }
115
116 private static boolean canFindCoreClass( String className )
117 {
118 try
119 {
120 Thread.currentThread().getContextClassLoader().loadClass( className );
121
122 return true;
123 }
124 catch ( ClassNotFoundException e )
125 {
126 return false;
127 }
128 }
129
130
131
132
133
134
135
136 public void contextualize( Context context )
137 throws ContextException
138 {
139 container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
140 }
141 }