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
29 import org.apache.commons.cli.CommandLine;
30 import org.apache.maven.artifact.InvalidRepositoryException;
31 import org.apache.maven.bridge.MavenRepositorySystem;
32 import org.apache.maven.building.Source;
33 import org.apache.maven.cli.CLIManager;
34 import org.apache.maven.cli.CliRequest;
35 import org.apache.maven.execution.MavenExecutionRequest;
36 import org.apache.maven.execution.MavenExecutionRequestPopulationException;
37 import org.apache.maven.settings.Mirror;
38 import org.apache.maven.settings.Proxy;
39 import org.apache.maven.settings.Repository;
40 import org.apache.maven.settings.Server;
41 import org.apache.maven.settings.Settings;
42 import org.apache.maven.settings.SettingsUtils;
43 import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
44 import org.apache.maven.settings.building.SettingsBuilder;
45 import org.apache.maven.settings.building.SettingsBuildingRequest;
46 import org.apache.maven.settings.building.SettingsBuildingResult;
47 import org.apache.maven.settings.building.SettingsProblem;
48 import org.apache.maven.settings.crypto.SettingsDecrypter;
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51
52 import static org.apache.maven.cli.ResolveFile.resolveFile;
53
54
55
56
57 @Named(SettingsXmlConfigurationProcessor.HINT)
58 @Singleton
59 public class SettingsXmlConfigurationProcessor implements ConfigurationProcessor {
60 public static final String HINT = "settings";
61
62 public static final String USER_HOME = System.getProperty("user.home");
63
64 public static final File USER_MAVEN_CONFIGURATION_HOME = new File(USER_HOME, ".m2");
65
66 public static final File DEFAULT_USER_SETTINGS_FILE = new File(USER_MAVEN_CONFIGURATION_HOME, "settings.xml");
67
68 public static final File DEFAULT_GLOBAL_SETTINGS_FILE = new File(System.getProperty("maven.conf"), "settings.xml");
69
70 private final Logger logger = LoggerFactory.getLogger(SettingsXmlConfigurationProcessor.class);
71
72 @Inject
73 private SettingsBuilder settingsBuilder;
74
75 @Inject
76 private SettingsDecrypter settingsDecrypter;
77
78 @Inject
79 private MavenRepositorySystem mavenRepositorySystem;
80
81 @Override
82 public void process(CliRequest cliRequest) throws Exception {
83 CommandLine commandLine = cliRequest.getCommandLine();
84 String workingDirectory = cliRequest.getWorkingDirectory();
85 MavenExecutionRequest request = cliRequest.getRequest();
86
87 File userSettingsFile;
88
89 if (commandLine.hasOption(CLIManager.ALTERNATE_USER_SETTINGS)) {
90 userSettingsFile = new File(commandLine.getOptionValue(CLIManager.ALTERNATE_USER_SETTINGS));
91 userSettingsFile = resolveFile(userSettingsFile, workingDirectory);
92
93 if (!userSettingsFile.isFile()) {
94 throw new FileNotFoundException("The specified user settings file does not exist: " + userSettingsFile);
95 }
96 } else {
97 userSettingsFile = DEFAULT_USER_SETTINGS_FILE;
98 }
99
100 File globalSettingsFile;
101
102 if (commandLine.hasOption(CLIManager.ALTERNATE_GLOBAL_SETTINGS)) {
103 globalSettingsFile = new File(commandLine.getOptionValue(CLIManager.ALTERNATE_GLOBAL_SETTINGS));
104 globalSettingsFile = resolveFile(globalSettingsFile, workingDirectory);
105
106 if (!globalSettingsFile.isFile()) {
107 throw new FileNotFoundException(
108 "The specified global settings file does not exist: " + globalSettingsFile);
109 }
110 } else {
111 globalSettingsFile = DEFAULT_GLOBAL_SETTINGS_FILE;
112 }
113
114 request.setGlobalSettingsFile(globalSettingsFile);
115 request.setUserSettingsFile(userSettingsFile);
116
117 SettingsBuildingRequest settingsRequest = new DefaultSettingsBuildingRequest();
118 settingsRequest.setGlobalSettingsFile(globalSettingsFile);
119 settingsRequest.setUserSettingsFile(userSettingsFile);
120 settingsRequest.setSystemProperties(cliRequest.getSystemProperties());
121 settingsRequest.setUserProperties(cliRequest.getUserProperties());
122
123 if (request.getEventSpyDispatcher() != null) {
124 request.getEventSpyDispatcher().onEvent(settingsRequest);
125 }
126
127 logger.debug(
128 "Reading global settings from {}",
129 getLocation(settingsRequest.getGlobalSettingsSource(), settingsRequest.getGlobalSettingsFile()));
130 logger.debug(
131 "Reading user settings from {}",
132 getLocation(settingsRequest.getUserSettingsSource(), settingsRequest.getUserSettingsFile()));
133
134 SettingsBuildingResult settingsResult = settingsBuilder.build(settingsRequest);
135
136 if (request.getEventSpyDispatcher() != null) {
137 request.getEventSpyDispatcher().onEvent(settingsResult);
138 }
139
140 populateFromSettings(request, settingsResult.getEffectiveSettings());
141
142 if (!settingsResult.getProblems().isEmpty() && logger.isWarnEnabled()) {
143 logger.warn("");
144 logger.warn("Some problems were encountered while building the effective settings");
145
146 for (SettingsProblem problem : settingsResult.getProblems()) {
147 logger.warn("{} @ {}", problem.getMessage(), problem.getLocation());
148 }
149 logger.warn("");
150 }
151 }
152
153 private MavenExecutionRequest populateFromSettings(MavenExecutionRequest request, Settings settings)
154 throws MavenExecutionRequestPopulationException {
155 if (settings == null) {
156 return request;
157 }
158
159 request.setOffline(settings.isOffline());
160
161 request.setInteractiveMode(settings.isInteractiveMode());
162
163 request.setPluginGroups(settings.getPluginGroups());
164
165 request.setLocalRepositoryPath(settings.getLocalRepository());
166
167 for (Server server : settings.getServers()) {
168 server = server.clone();
169
170 request.addServer(server);
171 }
172
173
174
175
176
177
178
179
180
181
182
183
184
185 for (Proxy proxy : settings.getProxies()) {
186 if (!proxy.isActive()) {
187 continue;
188 }
189
190 proxy = proxy.clone();
191
192 request.addProxy(proxy);
193 }
194
195
196
197
198
199
200
201
202
203 for (Mirror mirror : settings.getMirrors()) {
204 mirror = mirror.clone();
205
206 request.addMirror(mirror);
207 }
208
209 request.setActiveProfiles(settings.getActiveProfiles());
210
211 for (org.apache.maven.settings.Profile rawProfile : settings.getProfiles()) {
212 request.addProfile(SettingsUtils.convertFromSettingsProfile(rawProfile));
213
214 if (settings.getActiveProfiles().contains(rawProfile.getId())) {
215 List<Repository> remoteRepositories = rawProfile.getRepositories();
216 for (Repository remoteRepository : remoteRepositories) {
217 try {
218 request.addRemoteRepository(
219 mavenRepositorySystem.buildArtifactRepositoryFromRepo(remoteRepository));
220 } catch (InvalidRepositoryException e) {
221
222 }
223 }
224
225 List<Repository> pluginRepositories = rawProfile.getPluginRepositories();
226 for (Repository pluginRepository : pluginRepositories) {
227 try {
228 request.addPluginArtifactRepository(
229 mavenRepositorySystem.buildArtifactRepositoryFromRepo(pluginRepository));
230 } catch (InvalidRepositoryException e) {
231
232 }
233 }
234 }
235 }
236 return request;
237 }
238
239 private Object getLocation(Source source, File defaultLocation) {
240 if (source != null) {
241 return source.getLocation();
242 }
243 return defaultLocation;
244 }
245 }