1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.execution;
20
21 import java.io.File;
22 import java.nio.file.Path;
23 import java.util.Date;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Properties;
27
28 import org.apache.maven.artifact.repository.ArtifactRepository;
29 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
30 import org.apache.maven.eventspy.internal.EventSpyDispatcher;
31 import org.apache.maven.model.Profile;
32 import org.apache.maven.project.ProjectBuildingRequest;
33 import org.apache.maven.settings.Mirror;
34 import org.apache.maven.settings.Proxy;
35 import org.apache.maven.settings.Server;
36 import org.apache.maven.toolchain.model.ToolchainModel;
37 import org.codehaus.plexus.logging.Logger;
38 import org.eclipse.aether.RepositoryCache;
39 import org.eclipse.aether.repository.WorkspaceReader;
40 import org.eclipse.aether.transfer.TransferListener;
41
42 /**
43 */
44 public interface MavenExecutionRequest {
45 // ----------------------------------------------------------------------
46 // Logging
47 // ----------------------------------------------------------------------
48
49 int LOGGING_LEVEL_DEBUG = Logger.LEVEL_DEBUG;
50
51 int LOGGING_LEVEL_INFO = Logger.LEVEL_INFO;
52
53 int LOGGING_LEVEL_WARN = Logger.LEVEL_WARN;
54
55 int LOGGING_LEVEL_ERROR = Logger.LEVEL_ERROR;
56
57 int LOGGING_LEVEL_FATAL = Logger.LEVEL_FATAL;
58
59 int LOGGING_LEVEL_DISABLED = Logger.LEVEL_DISABLED;
60
61 // ----------------------------------------------------------------------
62 // Reactor Failure Mode
63 // ----------------------------------------------------------------------
64
65 String REACTOR_FAIL_FAST = "FAIL_FAST";
66
67 String REACTOR_FAIL_AT_END = "FAIL_AT_END";
68
69 String REACTOR_FAIL_NEVER = "FAIL_NEVER";
70
71 // ----------------------------------------------------------------------
72 // Reactor Make Mode
73 // ----------------------------------------------------------------------
74
75 String REACTOR_MAKE_UPSTREAM = "make-upstream";
76
77 String REACTOR_MAKE_DOWNSTREAM = "make-downstream";
78
79 String REACTOR_MAKE_BOTH = "make-both";
80
81 // ----------------------------------------------------------------------
82 // Artifact repository policies
83 // ----------------------------------------------------------------------
84
85 String CHECKSUM_POLICY_FAIL = ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL;
86
87 String CHECKSUM_POLICY_WARN = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
88
89 // ----------------------------------------------------------------------
90 //
91 // ----------------------------------------------------------------------
92
93 // Base directory
94
95 /**
96 * @deprecated use {@link #setTopDirectory(Path)} instead
97 */
98 @Deprecated
99 MavenExecutionRequest setBaseDirectory(File basedir);
100
101 /**
102 * @deprecated use {@link #getTopDirectory()} instead
103 */
104 @Deprecated
105 String getBaseDirectory();
106
107 // Timing (remove this)
108 MavenExecutionRequest setStartTime(Date start);
109
110 Date getStartTime();
111
112 // Goals
113 MavenExecutionRequest setGoals(List<String> goals);
114
115 List<String> getGoals();
116
117 // Properties
118
119 /**
120 * Sets the system properties to use for interpolation and profile activation. The system properties are collected
121 * from the runtime environment like {@link System#getProperties()} and environment variables.
122 *
123 * @param systemProperties The system properties, may be {@code null}.
124 * @return This request, never {@code null}.
125 */
126 MavenExecutionRequest setSystemProperties(Properties systemProperties);
127
128 /**
129 * Gets the system properties to use for interpolation and profile activation. The system properties are collected
130 * from the runtime environment like {@link System#getProperties()} and environment variables.
131 *
132 * @return The system properties, never {@code null}.
133 */
134 Properties getSystemProperties();
135
136 /**
137 * Sets the user properties to use for interpolation and profile activation. The user properties have been
138 * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
139 * line.
140 *
141 * @param userProperties The user properties, may be {@code null}.
142 * @return This request, never {@code null}.
143 */
144 MavenExecutionRequest setUserProperties(Properties userProperties);
145
146 /**
147 * Gets the user properties to use for interpolation and profile activation. The user properties have been
148 * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
149 * line.
150 *
151 * @return The user properties, never {@code null}.
152 */
153 Properties getUserProperties();
154
155 // Reactor
156 MavenExecutionRequest setReactorFailureBehavior(String failureBehavior);
157
158 String getReactorFailureBehavior();
159
160 /**
161 * @deprecated Since Maven 4: use {@link #getProjectActivation()}.
162 */
163 @Deprecated
164 MavenExecutionRequest setSelectedProjects(List<String> projects);
165
166 /**
167 * @deprecated Since Maven 4: use {@link #getProjectActivation()}.
168 */
169 @Deprecated
170 List<String> getSelectedProjects();
171
172 /**
173 * @param projects the projects to exclude
174 * @return this MavenExecutionRequest
175 * @since 3.2
176 * @deprecated Since Maven 4: use {@link #getProjectActivation()}.
177 */
178 @Deprecated
179 MavenExecutionRequest setExcludedProjects(List<String> projects);
180
181 /**
182 * @return the excluded projects, never {@code null}
183 * @since 3.2
184 * @deprecated Since Maven 4: use {@link #getProjectActivation()}.
185 */
186 @Deprecated
187 List<String> getExcludedProjects();
188
189 /**
190 * Sets whether the build should be resumed from the data in the resume.properties file.
191 * @param resume Whether or not to resume a previous build.
192 * @return This request, never {@code null}.
193 */
194 MavenExecutionRequest setResume(boolean resume);
195
196 /**
197 * @return Whether the build should be resumed from the data in the resume.properties file.
198 */
199 boolean isResume();
200
201 MavenExecutionRequest setResumeFrom(String project);
202
203 String getResumeFrom();
204
205 MavenExecutionRequest setMakeBehavior(String makeBehavior);
206
207 String getMakeBehavior();
208
209 /**
210 * Set's the parallel degree of concurrency used by the build.
211 *
212 * @param degreeOfConcurrency
213 */
214 void setDegreeOfConcurrency(int degreeOfConcurrency);
215
216 /**
217 * @return the degree of concurrency for the build.
218 */
219 int getDegreeOfConcurrency();
220
221 // Recursive (really to just process the top-level POM)
222 MavenExecutionRequest setRecursive(boolean recursive);
223
224 boolean isRecursive();
225
226 MavenExecutionRequest setPom(File pom);
227
228 File getPom();
229
230 // Errors
231 MavenExecutionRequest setShowErrors(boolean showErrors);
232
233 boolean isShowErrors();
234
235 // Transfer listeners
236 MavenExecutionRequest setTransferListener(TransferListener transferListener);
237
238 TransferListener getTransferListener();
239
240 // Logging
241 MavenExecutionRequest setLoggingLevel(int loggingLevel);
242
243 int getLoggingLevel();
244
245 // Update snapshots
246 MavenExecutionRequest setUpdateSnapshots(boolean updateSnapshots);
247
248 boolean isUpdateSnapshots();
249
250 MavenExecutionRequest setNoSnapshotUpdates(boolean noSnapshotUpdates);
251
252 boolean isNoSnapshotUpdates();
253
254 // Checksum policy
255 MavenExecutionRequest setGlobalChecksumPolicy(String globalChecksumPolicy);
256
257 String getGlobalChecksumPolicy();
258
259 // Local repository
260 MavenExecutionRequest setLocalRepositoryPath(String localRepository);
261
262 MavenExecutionRequest setLocalRepositoryPath(File localRepository);
263
264 File getLocalRepositoryPath();
265
266 MavenExecutionRequest setLocalRepository(ArtifactRepository repository);
267
268 ArtifactRepository getLocalRepository();
269
270 // Interactive
271 MavenExecutionRequest setInteractiveMode(boolean interactive);
272
273 boolean isInteractiveMode();
274
275 // Offline
276 MavenExecutionRequest setOffline(boolean offline);
277
278 boolean isOffline();
279
280 boolean isCacheTransferError();
281
282 MavenExecutionRequest setCacheTransferError(boolean cacheTransferError);
283
284 boolean isCacheNotFound();
285
286 MavenExecutionRequest setCacheNotFound(boolean cacheNotFound);
287
288 // Profiles
289 List<Profile> getProfiles();
290
291 MavenExecutionRequest addProfile(Profile profile);
292
293 MavenExecutionRequest setProfiles(List<Profile> profiles);
294
295 /**
296 * @deprecated Since Maven 4: use {@link #getProfileActivation()}.
297 */
298 @Deprecated
299 MavenExecutionRequest addActiveProfile(String profile);
300
301 /**
302 * @deprecated Since Maven 4: use {@link #getProfileActivation()}.
303 */
304 @Deprecated
305 MavenExecutionRequest addActiveProfiles(List<String> profiles);
306
307 /**
308 * @deprecated Since Maven 4: use {@link #getProfileActivation()}.
309 */
310 @Deprecated
311 MavenExecutionRequest setActiveProfiles(List<String> profiles);
312
313 /**
314 * @return The list of profiles that the user wants to activate.
315 * @deprecated Since Maven 4: use {@link #getProfileActivation()}.
316 */
317 @Deprecated
318 List<String> getActiveProfiles();
319
320 /**
321 * @deprecated Since Maven 4: use {@link #getProfileActivation()}.
322 */
323 @Deprecated
324 MavenExecutionRequest addInactiveProfile(String profile);
325
326 /**
327 * @deprecated Since Maven 4: use {@link #getProfileActivation()}.
328 */
329 @Deprecated
330 MavenExecutionRequest addInactiveProfiles(List<String> profiles);
331
332 /**
333 * @deprecated Since Maven 4: use {@link #getProfileActivation()}.
334 */
335 @Deprecated
336 MavenExecutionRequest setInactiveProfiles(List<String> profiles);
337
338 /**
339 * @return The list of profiles that the user wants to de-activate.
340 * @deprecated Since Maven 4: use {@link #getProfileActivation()}.
341 */
342 @Deprecated
343 List<String> getInactiveProfiles();
344
345 /**
346 * Return the requested activation(s) of project(s) in this execution.
347 * @return requested (de-)activation(s) of project(s) in this execution. Never {@code null}.
348 */
349 ProjectActivation getProjectActivation();
350
351 /**
352 * Return the requested activation(s) of profile(s) in this execution.
353 * @return requested (de-)activation(s) of profile(s) in this execution. Never {@code null}.
354 */
355 ProfileActivation getProfileActivation();
356
357 // Proxies
358 List<Proxy> getProxies();
359
360 MavenExecutionRequest setProxies(List<Proxy> proxies);
361
362 MavenExecutionRequest addProxy(Proxy proxy);
363
364 // Servers
365 List<Server> getServers();
366
367 MavenExecutionRequest setServers(List<Server> servers);
368
369 MavenExecutionRequest addServer(Server server);
370
371 // Mirrors
372 List<Mirror> getMirrors();
373
374 MavenExecutionRequest setMirrors(List<Mirror> mirrors);
375
376 MavenExecutionRequest addMirror(Mirror mirror);
377
378 // Plugin groups
379 List<String> getPluginGroups();
380
381 MavenExecutionRequest setPluginGroups(List<String> pluginGroups);
382
383 MavenExecutionRequest addPluginGroup(String pluginGroup);
384
385 MavenExecutionRequest addPluginGroups(List<String> pluginGroups);
386
387 boolean isProjectPresent();
388
389 MavenExecutionRequest setProjectPresent(boolean isProjectPresent);
390
391 File getUserSettingsFile();
392
393 MavenExecutionRequest setUserSettingsFile(File userSettingsFile);
394
395 File getProjectSettingsFile();
396
397 MavenExecutionRequest setProjectSettingsFile(File projectSettingsFile);
398
399 File getGlobalSettingsFile();
400
401 MavenExecutionRequest setGlobalSettingsFile(File globalSettingsFile);
402
403 MavenExecutionRequest addRemoteRepository(ArtifactRepository repository);
404
405 MavenExecutionRequest addPluginArtifactRepository(ArtifactRepository repository);
406
407 /**
408 * Set a new list of remote repositories to use the execution request. This is necessary if you perform
409 * transformations on the remote repositories being used. For example if you replace existing repositories with
410 * mirrors then it's easier to just replace the whole list with a new list of transformed repositories.
411 *
412 * @param repositories
413 * @return This request, never {@code null}.
414 */
415 MavenExecutionRequest setRemoteRepositories(List<ArtifactRepository> repositories);
416
417 List<ArtifactRepository> getRemoteRepositories();
418
419 MavenExecutionRequest setPluginArtifactRepositories(List<ArtifactRepository> repositories);
420
421 List<ArtifactRepository> getPluginArtifactRepositories();
422
423 MavenExecutionRequest setRepositoryCache(RepositoryCache repositoryCache);
424
425 RepositoryCache getRepositoryCache();
426
427 WorkspaceReader getWorkspaceReader();
428
429 MavenExecutionRequest setWorkspaceReader(WorkspaceReader workspaceReader);
430
431 File getUserToolchainsFile();
432
433 MavenExecutionRequest setUserToolchainsFile(File userToolchainsFile);
434
435 /**
436 *
437 *
438 * @return the global toolchains file
439 * @since 3.3.0
440 */
441 File getGlobalToolchainsFile();
442
443 /**
444 *
445 * @param globalToolchainsFile the global toolchains file
446 * @return this request
447 * @since 3.3.0
448 */
449 MavenExecutionRequest setGlobalToolchainsFile(File globalToolchainsFile);
450
451 ExecutionListener getExecutionListener();
452
453 MavenExecutionRequest setExecutionListener(ExecutionListener executionListener);
454
455 ProjectBuildingRequest getProjectBuildingRequest();
456
457 /**
458 * @since 3.1
459 * @deprecated Since 3.9 there is no direct Maven2 interop offered at LRM level. See
460 * <a href="https://maven.apache.org/resolver/configuration.html">Resolver Configuration</a> page option
461 * {@code aether.artifactResolver.simpleLrmInterop} that provides similar semantics. This method should
462 * be never invoked, and always returns {@code false}.
463 */
464 @Deprecated
465 boolean isUseLegacyLocalRepository();
466
467 /**
468 * @since 3.1
469 * @deprecated Since 3.9 there is no direct Maven2 interop offered at LRM level. See
470 * <a href="https://maven.apache.org/resolver/configuration.html">Resolver Configuration</a> page option
471 * {@code aether.artifactResolver.simpleLrmInterop} that provides similar semantics. This method should
472 * be never invoked, and ignores parameter (value remains always {@code false}).
473 */
474 @Deprecated
475 MavenExecutionRequest setUseLegacyLocalRepository(boolean useLegacyLocalRepository);
476
477 /**
478 * Controls the {@link org.apache.maven.lifecycle.internal.builder.Builder} used by Maven by specification
479 * of the builder's id.
480 *
481 * @since 3.2.0
482 */
483 MavenExecutionRequest setBuilderId(String builderId);
484
485 /**
486 * Controls the {@link org.apache.maven.lifecycle.internal.builder.Builder} used by Maven by specification
487 * of the builders id.
488 *
489 * @since 3.2.0
490 */
491 String getBuilderId();
492
493 /**
494 *
495 * @param toolchains all toolchains grouped by type
496 * @return this request
497 * @since 3.3.0
498 */
499 MavenExecutionRequest setToolchains(Map<String, List<ToolchainModel>> toolchains);
500
501 /**
502 *
503 * @return all toolchains grouped by type, never {@code null}
504 * @since 3.3.0
505 */
506 Map<String, List<ToolchainModel>> getToolchains();
507
508 /**
509 * @since 3.3.0
510 * @deprecated use {@link #setRootDirectory(Path)} instead
511 */
512 @Deprecated
513 void setMultiModuleProjectDirectory(File file);
514
515 /**
516 * @since 3.3.0
517 * @deprecated use {@link #getRootDirectory()} instead
518 */
519 @Deprecated
520 File getMultiModuleProjectDirectory();
521
522 /**
523 * Sets the top directory of the project.
524 *
525 * @since 4.0.0
526 */
527 MavenExecutionRequest setTopDirectory(Path topDirectory);
528
529 /**
530 * Gets the directory of the topmost project being built, usually the current directory or the
531 * directory pointed at by the {@code -f/--file} command line argument.
532 *
533 * @since 4.0.0
534 */
535 Path getTopDirectory();
536
537 /**
538 * Sets the root directory of the project.
539 *
540 * @since 4.0.0
541 */
542 MavenExecutionRequest setRootDirectory(Path rootDirectory);
543
544 /**
545 * Gets the root directory of the top project, which is the parent directory containing the {@code .mvn}
546 * directory or a {@code pom.xml} file with the {@code root="true"} attribute.
547 * If there's no such directory, an {@code IllegalStateException} will be thrown.
548 *
549 * @throws IllegalStateException if the root directory could not be found
550 * @see #getTopDirectory()
551 * @since 4.0.0
552 */
553 Path getRootDirectory();
554
555 /**
556 * @since 3.3.0
557 */
558 MavenExecutionRequest setEventSpyDispatcher(EventSpyDispatcher eventSpyDispatcher);
559
560 /**
561 * @since 3.3.0
562 */
563 EventSpyDispatcher getEventSpyDispatcher();
564
565 /**
566 * @since 3.3.0
567 */
568 Map<String, Object> getData();
569 }