1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.cli.configuration;
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.io.FileNotFoundException;
27 import java.util.List;
28 import java.util.Properties;
29
30 import org.apache.commons.cli.CommandLine;
31 import org.apache.maven.artifact.InvalidRepositoryException;
32 import org.apache.maven.bridge.MavenRepositorySystem;
33 import org.apache.maven.building.Source;
34 import org.apache.maven.cli.CLIManager;
35 import org.apache.maven.cli.CliRequest;
36 import org.apache.maven.execution.MavenExecutionRequest;
37 import org.apache.maven.execution.MavenExecutionRequestPopulationException;
38 import org.apache.maven.settings.Mirror;
39 import org.apache.maven.settings.Profile;
40 import org.apache.maven.settings.Proxy;
41 import org.apache.maven.settings.Repository;
42 import org.apache.maven.settings.Server;
43 import org.apache.maven.settings.Settings;
44 import org.apache.maven.settings.SettingsUtils;
45 import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
46 import org.apache.maven.settings.building.SettingsBuilder;
47 import org.apache.maven.settings.building.SettingsBuildingRequest;
48 import org.apache.maven.settings.building.SettingsBuildingResult;
49 import org.apache.maven.settings.building.SettingsProblem;
50 import org.apache.maven.settings.crypto.SettingsDecrypter;
51 import org.slf4j.Logger;
52 import org.slf4j.LoggerFactory;
53
54 import static org.apache.maven.cli.ResolveFile.resolveFile;
55
56
57
58
59 @Named(SettingsXmlConfigurationProcessor.HINT)
60 @Singleton
61 @Deprecated
62 public class SettingsXmlConfigurationProcessor implements ConfigurationProcessor {
63 public static final String HINT = "settings";
64
65 public static final String USER_HOME = System.getProperty("user.home");
66
67 public static final File USER_MAVEN_CONFIGURATION_HOME = new File(USER_HOME, ".m2");
68
69 public static final File DEFAULT_USER_SETTINGS_FILE = new File(USER_MAVEN_CONFIGURATION_HOME, "settings.xml");
70
71 public static final File DEFAULT_PROJECT_SETTINGS_FILE = new File(".mvn", "settings.xml");
72
73 public static final File DEFAULT_INSTALLATION_SETTINGS_FILE =
74 new File(System.getProperty("maven.conf"), "settings.xml");
75
76 private static final Logger LOGGER = LoggerFactory.getLogger(SettingsXmlConfigurationProcessor.class);
77
78 private final SettingsBuilder settingsBuilder;
79
80 @Inject
81 public SettingsXmlConfigurationProcessor(SettingsBuilder settingsBuilder, SettingsDecrypter settingsDecrypter) {
82 this.settingsBuilder = settingsBuilder;
83 }
84
85 @Override
86 public void process(CliRequest cliRequest) throws Exception {
87 CommandLine commandLine = cliRequest.getCommandLine();
88 String workingDirectory = cliRequest.getWorkingDirectory();
89 MavenExecutionRequest request = cliRequest.getRequest();
90
91 File userSettingsFile;
92
93 if (commandLine.hasOption(CLIManager.ALTERNATE_USER_SETTINGS)) {
94 userSettingsFile = new File(commandLine.getOptionValue(CLIManager.ALTERNATE_USER_SETTINGS));
95 userSettingsFile = resolveFile(userSettingsFile, workingDirectory);
96
97 if (!userSettingsFile.isFile()) {
98 throw new FileNotFoundException("The specified user settings file does not exist: " + userSettingsFile);
99 }
100 } else {
101 userSettingsFile = DEFAULT_USER_SETTINGS_FILE;
102 }
103
104 File projectSettingsFile;
105
106 if (commandLine.hasOption(CLIManager.ALTERNATE_PROJECT_SETTINGS)) {
107 projectSettingsFile = new File(commandLine.getOptionValue(CLIManager.ALTERNATE_PROJECT_SETTINGS));
108 projectSettingsFile = resolveFile(projectSettingsFile, workingDirectory);
109
110 if (!projectSettingsFile.isFile()) {
111 throw new FileNotFoundException(
112 "The specified project settings file does not exist: " + projectSettingsFile);
113 }
114 } else if (cliRequest.getRootDirectory() != null) {
115 projectSettingsFile = DEFAULT_PROJECT_SETTINGS_FILE;
116 projectSettingsFile = resolveFile(
117 projectSettingsFile, cliRequest.getRootDirectory().toString());
118 } else {
119 projectSettingsFile = null;
120 }
121
122 File installationSettingsFile;
123
124 if (commandLine.hasOption(CLIManager.ALTERNATE_INSTALLATION_SETTINGS)) {
125 installationSettingsFile = new File(commandLine.getOptionValue(CLIManager.ALTERNATE_INSTALLATION_SETTINGS));
126 installationSettingsFile = resolveFile(installationSettingsFile, workingDirectory);
127
128 if (!installationSettingsFile.isFile()) {
129 throw new FileNotFoundException(
130 "The specified installation settings file does not exist: " + installationSettingsFile);
131 }
132 } else if (commandLine.hasOption(CLIManager.ALTERNATE_GLOBAL_SETTINGS)) {
133 installationSettingsFile = new File(commandLine.getOptionValue(CLIManager.ALTERNATE_GLOBAL_SETTINGS));
134 installationSettingsFile = resolveFile(installationSettingsFile, workingDirectory);
135
136 if (!installationSettingsFile.isFile()) {
137 throw new FileNotFoundException(
138 "The specified installation settings file does not exist: " + installationSettingsFile);
139 }
140 } else {
141 installationSettingsFile = DEFAULT_INSTALLATION_SETTINGS_FILE;
142 }
143
144 request.setInstallationSettingsFile(installationSettingsFile);
145 request.setProjectSettingsFile(projectSettingsFile);
146 request.setUserSettingsFile(userSettingsFile);
147
148 SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
149 settingsRequest.setGlobalSettingsFile(installationSettingsFile);
150 settingsRequest.setProjectSettingsFile(projectSettingsFile);
151 settingsRequest.setUserSettingsFile(userSettingsFile);
152 settingsRequest.setSystemProperties(cliRequest.getSystemProperties());
153 Properties props = cliRequest.getUserProperties();
154 if (cliRequest.getRootDirectory() != null) {
155 props = new Properties();
156 props.putAll(cliRequest.getUserProperties());
157 props.put("session.rootDirectory", cliRequest.getRootDirectory().toString());
158 }
159 settingsRequest.setUserProperties(props);
160
161 if (request.getEventSpyDispatcher() != null) {
162 request.getEventSpyDispatcher().onEvent(settingsRequest);
163 }
164
165 LOGGER.debug(
166 "Reading installation settings from '{}'",
167 getLocation(settingsRequest.getGlobalSettingsSource(), settingsRequest.getGlobalSettingsFile()));
168 LOGGER.debug(
169 "Reading project settings from '{}'",
170 getLocation(settingsRequest.getProjectSettingsSource(), settingsRequest.getProjectSettingsFile()));
171 LOGGER.debug(
172 "Reading user settings from '{}'",
173 getLocation(settingsRequest.getUserSettingsSource(), settingsRequest.getUserSettingsFile()));
174
175 SettingsBuildingResult settingsResult = settingsBuilder.build(settingsRequest);
176
177 if (request.getEventSpyDispatcher() != null) {
178 request.getEventSpyDispatcher().onEvent(settingsResult);
179 }
180
181 populateFromSettings(request, settingsResult.getEffectiveSettings());
182
183 if (!settingsResult.getProblems().isEmpty() && LOGGER.isWarnEnabled()) {
184 LOGGER.warn("");
185 LOGGER.warn("Some problems were encountered while building the effective settings");
186
187 for (SettingsProblem problem : settingsResult.getProblems()) {
188 LOGGER.warn("{} @ {}", problem.getMessage(), problem.getLocation());
189 }
190 LOGGER.warn("");
191 }
192 }
193
194 private MavenExecutionRequest populateFromSettings(MavenExecutionRequest request, Settings settings)
195 throws MavenExecutionRequestPopulationException {
196 if (settings == null) {
197 return request;
198 }
199
200 request.setOffline(settings.isOffline());
201
202 request.setInteractiveMode(settings.isInteractiveMode());
203
204 request.setPluginGroups(settings.getPluginGroups());
205
206 request.setLocalRepositoryPath(settings.getLocalRepository());
207
208 for (Server server : settings.getServers()) {
209 request.addServer(server);
210 }
211
212
213
214
215
216
217
218
219
220
221
222
223
224 for (Proxy proxy : settings.getProxies()) {
225 if (!proxy.isActive()) {
226 continue;
227 }
228
229 request.addProxy(proxy);
230 }
231
232
233
234
235
236
237
238
239
240 for (Mirror mirror : settings.getMirrors()) {
241 request.addMirror(mirror);
242 }
243
244 for (Repository remoteRepository : settings.getRepositories()) {
245 try {
246 request.addRemoteRepository(MavenRepositorySystem.buildArtifactRepository(remoteRepository));
247 } catch (InvalidRepositoryException e) {
248
249 }
250 }
251
252 for (Repository pluginRepository : settings.getPluginRepositories()) {
253 try {
254 request.addPluginArtifactRepository(MavenRepositorySystem.buildArtifactRepository(pluginRepository));
255 } catch (InvalidRepositoryException e) {
256
257 }
258 }
259
260 request.setActiveProfiles(settings.getActiveProfiles());
261
262 for (Profile rawProfile : settings.getProfiles()) {
263 request.addProfile(SettingsUtils.convertFromSettingsProfile(rawProfile));
264
265 if (settings.getActiveProfiles().contains(rawProfile.getId())) {
266 List<Repository> remoteRepositories = rawProfile.getRepositories();
267 for (Repository remoteRepository : remoteRepositories) {
268 try {
269 request.addRemoteRepository(MavenRepositorySystem.buildArtifactRepository(remoteRepository));
270 } catch (InvalidRepositoryException e) {
271
272 }
273 }
274
275 List<Repository> pluginRepositories = rawProfile.getPluginRepositories();
276 for (Repository pluginRepository : pluginRepositories) {
277 try {
278 request.addPluginArtifactRepository(
279 MavenRepositorySystem.buildArtifactRepository(pluginRepository));
280 } catch (InvalidRepositoryException e) {
281
282 }
283 }
284 }
285 }
286 return request;
287 }
288
289 private Object getLocation(Source source, File defaultLocation) {
290 if (source != null) {
291 return source.getLocation();
292 }
293 return defaultLocation;
294 }
295 }