View Javadoc
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 }