1 package org.apache.maven.execution;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.Set;
28
29 import javax.inject.Inject;
30 import javax.inject.Named;
31 import javax.inject.Singleton;
32
33 import org.apache.maven.artifact.InvalidRepositoryException;
34 import org.apache.maven.artifact.repository.ArtifactRepository;
35 import org.apache.maven.bridge.MavenRepositorySystem;
36 import org.apache.maven.repository.RepositorySystem;
37
38
39
40 import org.apache.maven.settings.Mirror;
41 import org.apache.maven.settings.Proxy;
42 import org.apache.maven.settings.Repository;
43 import org.apache.maven.settings.Server;
44 import org.apache.maven.settings.Settings;
45 import org.apache.maven.settings.SettingsUtils;
46
47
48
49 import org.apache.maven.toolchain.model.PersistedToolchains;
50 import org.apache.maven.toolchain.model.ToolchainModel;
51 import org.codehaus.plexus.util.StringUtils;
52
53
54
55
56 @Named
57 @Singleton
58 public class DefaultMavenExecutionRequestPopulator
59 implements MavenExecutionRequestPopulator
60 {
61
62 private final MavenRepositorySystem repositorySystem;
63
64 @Inject
65 public DefaultMavenExecutionRequestPopulator( MavenRepositorySystem repositorySystem )
66 {
67 this.repositorySystem = repositorySystem;
68 }
69
70
71 @Override
72 public MavenExecutionRequest populateFromToolchains( MavenExecutionRequest request, PersistedToolchains toolchains )
73 throws MavenExecutionRequestPopulationException
74 {
75 if ( toolchains != null )
76 {
77 Map<String, List<ToolchainModel>> groupedToolchains = new HashMap<>( 2 );
78
79 for ( ToolchainModel model : toolchains.getToolchains() )
80 {
81 if ( !groupedToolchains.containsKey( model.getType() ) )
82 {
83 groupedToolchains.put( model.getType(), new ArrayList<>() );
84 }
85
86 groupedToolchains.get( model.getType() ).add( model );
87 }
88
89 request.setToolchains( groupedToolchains );
90 }
91 return request;
92 }
93
94 @Override
95 public MavenExecutionRequest populateDefaults( MavenExecutionRequest request )
96 throws MavenExecutionRequestPopulationException
97 {
98 baseDirectory( request );
99
100 localRepository( request );
101
102 populateDefaultPluginGroups( request );
103
104 injectDefaultRepositories( request );
105
106 injectDefaultPluginRepositories( request );
107
108 return request;
109 }
110
111
112
113
114
115 private void populateDefaultPluginGroups( MavenExecutionRequest request )
116 {
117 request.addPluginGroup( "org.apache.maven.plugins" );
118 request.addPluginGroup( "org.codehaus.mojo" );
119 }
120
121 private void injectDefaultRepositories( MavenExecutionRequest request )
122 throws MavenExecutionRequestPopulationException
123 {
124 Set<String> definedRepositories = repositorySystem.getRepoIds( request.getRemoteRepositories() );
125
126 if ( !definedRepositories.contains( RepositorySystem.DEFAULT_REMOTE_REPO_ID ) )
127 {
128 try
129 {
130 request.addRemoteRepository( repositorySystem.createDefaultRemoteRepository( request ) );
131 }
132 catch ( Exception e )
133 {
134 throw new MavenExecutionRequestPopulationException( "Cannot create default remote repository.", e );
135 }
136 }
137 }
138
139 private void injectDefaultPluginRepositories( MavenExecutionRequest request )
140 throws MavenExecutionRequestPopulationException
141 {
142 Set<String> definedRepositories = repositorySystem.getRepoIds( request.getPluginArtifactRepositories() );
143
144 if ( !definedRepositories.contains( RepositorySystem.DEFAULT_REMOTE_REPO_ID ) )
145 {
146 try
147 {
148 request.addPluginArtifactRepository( repositorySystem.createDefaultRemoteRepository( request ) );
149 }
150 catch ( Exception e )
151 {
152 throw new MavenExecutionRequestPopulationException( "Cannot create default remote repository.", e );
153 }
154 }
155 }
156
157 private void localRepository( MavenExecutionRequest request )
158 throws MavenExecutionRequestPopulationException
159 {
160
161
162
163
164
165
166
167
168 if ( request.getLocalRepository() == null )
169 {
170 request.setLocalRepository( createLocalRepository( request ) );
171 }
172
173 if ( request.getLocalRepositoryPath() == null )
174 {
175 request.setLocalRepositoryPath( new File( request.getLocalRepository().getBasedir() ).getAbsoluteFile() );
176 }
177 }
178
179
180
181
182
183 private ArtifactRepository createLocalRepository( MavenExecutionRequest request )
184 throws MavenExecutionRequestPopulationException
185 {
186 String localRepositoryPath = null;
187
188 if ( request.getLocalRepositoryPath() != null )
189 {
190 localRepositoryPath = request.getLocalRepositoryPath().getAbsolutePath();
191 }
192
193 if ( StringUtils.isEmpty( localRepositoryPath ) )
194 {
195 localRepositoryPath = RepositorySystem.defaultUserLocalRepository.getAbsolutePath();
196 }
197
198 try
199 {
200 return repositorySystem.createLocalRepository( request, new File( localRepositoryPath ) );
201 }
202 catch ( Exception e )
203 {
204 throw new MavenExecutionRequestPopulationException( "Cannot create local repository.", e );
205 }
206 }
207
208 private void baseDirectory( MavenExecutionRequest request )
209 {
210 if ( request.getBaseDirectory() == null && request.getPom() != null )
211 {
212 request.setBaseDirectory( request.getPom().getAbsoluteFile().getParentFile() );
213 }
214 }
215
216
217
218 @Override
219 @Deprecated
220 public MavenExecutionRequest populateFromSettings( MavenExecutionRequest request, Settings settings )
221 throws MavenExecutionRequestPopulationException
222 {
223 if ( settings == null )
224 {
225 return request;
226 }
227
228 request.setOffline( settings.isOffline() );
229
230 request.setInteractiveMode( settings.isInteractiveMode() );
231
232 request.setPluginGroups( settings.getPluginGroups() );
233
234 request.setLocalRepositoryPath( settings.getLocalRepository() );
235
236 for ( Server server : settings.getServers() )
237 {
238 server = server.clone();
239
240 request.addServer( server );
241 }
242
243
244
245
246
247
248
249
250
251
252
253
254
255 for ( Proxy proxy : settings.getProxies() )
256 {
257 if ( !proxy.isActive() )
258 {
259 continue;
260 }
261
262 proxy = proxy.clone();
263
264 request.addProxy( proxy );
265 }
266
267
268
269
270
271
272
273
274
275 for ( Mirror mirror : settings.getMirrors() )
276 {
277 mirror = mirror.clone();
278
279 request.addMirror( mirror );
280 }
281
282 request.setActiveProfiles( settings.getActiveProfiles() );
283
284 for ( org.apache.maven.settings.Profile rawProfile : settings.getProfiles() )
285 {
286 request.addProfile( SettingsUtils.convertFromSettingsProfile( rawProfile.getDelegate() ) );
287
288 if ( settings.getActiveProfiles().contains( rawProfile.getId() ) )
289 {
290 List<Repository> remoteRepositories = rawProfile.getRepositories();
291 for ( Repository remoteRepository : remoteRepositories )
292 {
293 try
294 {
295 request.addRemoteRepository(
296 MavenRepositorySystem.buildArtifactRepository( remoteRepository ) );
297 }
298 catch ( InvalidRepositoryException e )
299 {
300
301 }
302 }
303
304 List<Repository> pluginRepositories = rawProfile.getPluginRepositories();
305 for ( Repository pluginRepo : pluginRepositories )
306 {
307 try
308 {
309 request.addPluginArtifactRepository(
310 MavenRepositorySystem.buildArtifactRepository( pluginRepo ) );
311 }
312 catch ( InvalidRepositoryException e )
313 {
314
315 }
316 }
317 }
318 }
319
320 return request;
321 }
322
323
324
325 }