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 org.apache.maven.model.Dependency;
23 import org.apache.maven.model.Model;
24 import org.apache.maven.project.ProjectBuildingRequest;
25 import org.apache.maven.shared.transfer.dependencies.DependableCoordinate;
26 import org.apache.maven.shared.transfer.dependencies.collect.CollectorResult;
27 import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollector;
28 import org.apache.maven.shared.transfer.dependencies.collect.DependencyCollectorException;
29 import org.codehaus.plexus.PlexusConstants;
30 import org.codehaus.plexus.PlexusContainer;
31 import org.codehaus.plexus.component.annotations.Component;
32 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
33 import org.codehaus.plexus.context.Context;
34 import org.codehaus.plexus.context.ContextException;
35 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
36
37
38
39
40
41
42 @Component( role = DependencyCollector.class, hint = "default" )
43 class DefaultDependencyCollector implements DependencyCollector, Contextualizable
44 {
45 private PlexusContainer container;
46
47 @Override
48 public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Dependency root )
49 throws DependencyCollectorException
50 {
51 validateParameters( buildingRequest, root );
52
53 try
54 {
55 String hint = isMaven31() ? "maven31" : "maven3";
56
57 DependencyCollector effectiveDependencyCollector = container.lookup( DependencyCollector.class, hint );
58
59 return effectiveDependencyCollector.collectDependencies( buildingRequest, root );
60 }
61 catch ( ComponentLookupException e )
62 {
63 throw new DependencyCollectorException( e.getMessage(), e );
64 }
65 }
66
67 @Override
68 public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
69 throws DependencyCollectorException
70 {
71 validateParameters( buildingRequest, root );
72
73 try
74 {
75 String hint = isMaven31() ? "maven31" : "maven3";
76
77 DependencyCollector effectiveDependencyCollector = container.lookup( DependencyCollector.class, hint );
78
79 return effectiveDependencyCollector.collectDependencies( buildingRequest, root );
80 }
81 catch ( ComponentLookupException e )
82 {
83 throw new DependencyCollectorException( e.getMessage(), e );
84 }
85 }
86
87 @Override
88 public CollectorResult collectDependencies( ProjectBuildingRequest buildingRequest, Model root )
89 throws DependencyCollectorException
90 {
91 validateParameters( buildingRequest, root );
92
93 try
94 {
95 String hint = isMaven31() ? "maven31" : "maven3";
96
97 DependencyCollector effectiveDependencyCollector = container.lookup( DependencyCollector.class, hint );
98
99 return effectiveDependencyCollector.collectDependencies( buildingRequest, root );
100 }
101 catch ( ComponentLookupException e )
102 {
103 throw new DependencyCollectorException( e.getMessage(), e );
104 }
105 }
106
107 private void validateParameters( ProjectBuildingRequest buildingRequest, DependableCoordinate root )
108 {
109 validateBuildingRequest( buildingRequest );
110 if ( root == null )
111 {
112 throw new IllegalArgumentException( "The parameter root is not allowed to be null." );
113 }
114 }
115
116 private void validateParameters( ProjectBuildingRequest buildingRequest, Dependency root )
117 {
118 validateBuildingRequest( buildingRequest );
119 if ( root == null )
120 {
121 throw new IllegalArgumentException( "The parameter root is not allowed to be null." );
122 }
123 }
124
125 private void validateParameters( ProjectBuildingRequest buildingRequest, Model root )
126 {
127 validateBuildingRequest( buildingRequest );
128 if ( root == null )
129 {
130 throw new IllegalArgumentException( "The parameter root is not allowed to be null." );
131 }
132 }
133
134 private void validateBuildingRequest( ProjectBuildingRequest buildingRequest )
135 {
136 if ( buildingRequest == null )
137 {
138 throw new IllegalArgumentException( "The parameter buildingRequest is not allowed to be null." );
139 }
140 }
141
142
143
144
145 protected static boolean isMaven31()
146 {
147 return canFindCoreClass( "org.eclipse.aether.artifact.Artifact" );
148 }
149
150 private static boolean canFindCoreClass( String className )
151 {
152 try
153 {
154 Thread.currentThread().getContextClassLoader().loadClass( className );
155
156 return true;
157 }
158 catch ( ClassNotFoundException e )
159 {
160 return false;
161 }
162 }
163
164
165
166
167
168
169
170 public void contextualize( Context context )
171 throws ContextException
172 {
173 container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
174 }
175
176 }