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