View Javadoc
1   package org.apache.maven.shared.invoker;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.File;
23  import java.io.InputStream;
24  import java.util.List;
25  import java.util.Map;
26  import java.util.Properties;
27  
28  /**
29   * Specifies the parameters used to control a Maven invocation.
30   *
31   */
32  public interface InvocationRequest
33  {
34  
35      /**
36       * By default, Maven is executed in batch mode. This mean no interaction with the Maven process can be done.
37       *
38       * @return <code>true</code> if Maven should be executed in batch mode, <code>false</code> if Maven is executed in
39       *         interactive mode.
40       * @since 3.0.0
41       */
42      boolean isBatchMode();
43  
44      /**
45       * Gets the network mode of the Maven invocation. By default, Maven is executed in online mode.
46       *
47       * @return <code>true</code> if Maven should be executed in offline mode, <code>false</code> if the online mode is
48       *         used.
49       */
50      boolean isOffline();
51  
52      /**
53       * Indicates whether Maven should enforce an update check for plugins and snapshots. By default, no update check is
54       * performed.
55       *
56       * @return <code>true</code> if plugins and snapshots should be updated, <code>false</code> otherwise.
57       */
58      boolean isUpdateSnapshots();
59  
60      /**
61       * Gets the recursion behavior of a reactor invocation. By default, Maven will recursive the build into sub modules.
62       *
63       * @return <code>true</code> if sub modules should be build, <code>false</code> otherwise.
64       */
65      boolean isRecursive();
66  
67      /**
68       * A list of specified reactor projects to build instead of all projects. A project can be specified by
69       * [groupId]:artifactId or by its relative path.
70       *
71       * @return the list of projects to add to reactor build, otherwise {@code null}
72       * @since 2.1
73       */
74      List<String> getProjects();
75  
76      /**
77       * Get the value of the {@code also-make} argument.
78       *
79       * @return {@code true} if the argument {@code also-make} was specified, otherwise {@code false}
80       * @since 2.1
81       */
82      boolean isAlsoMake();
83  
84      /**
85       * Get the value of the {@code also-make-dependents}
86       *
87       * @return {@code true} if the argument {@code also-make-dependents} was specified, otherwise {@code false}
88       * @since 2.1
89       */
90      boolean isAlsoMakeDependents();
91  
92      /**
93       * Get the value of {@code resume-from}
94       *
95       * @return specified reactor project to resume from
96       * @since 2.1
97       */
98      String getResumeFrom();
99  
100     /**
101      * Gets the debug mode of the Maven invocation. By default, Maven is executed in normal mode.
102      *
103      * @return <code>true</code> if Maven should be executed in debug mode, <code>false</code> if the normal mode should
104      *         be used.
105      */
106     boolean isDebug();
107 
108     /**
109      * Gets the exception output mode of the Maven invocation. By default, Maven will not print stack traces of build
110      * exceptions.
111      *
112      * @return <code>true</code> if Maven should print stack traces, <code>false</code> otherwise.
113      */
114     boolean isShowErrors();
115 
116     /**
117      * Indicates whether the environment variables of the current process should be propagated to the Maven invocation.
118      * By default, the current environment variables are inherited by the new Maven invocation.
119      *
120      * @return <code>true</code> if the environment variables should be propagated, <code>false</code> otherwise.
121      */
122     boolean isShellEnvironmentInherited();
123 
124     /**
125      * Indicates whether Maven should check for plugin updates. By default, plugin updates are not suppressed.
126      *
127      * @return <code>true</code> if plugin updates should be suppressed, <code>false</code> otherwise.
128      */
129     boolean isNonPluginUpdates();
130 
131     /**
132      * Gets the failure mode of the Maven invocation. By default, the mode {@link ReactorFailureBehavior#FailFast} is
133      * used.
134      *
135      * @return The failure mode, one of {@link ReactorFailureBehavior#FailFast},
136      *         {@link ReactorFailureBehavior#FailAtEnd} and {@link ReactorFailureBehavior#FailNever}.
137      * @since 3.0.0
138      */
139     ReactorFailureBehavior getReactorFailureBehavior();
140 
141     /**
142      * Gets the path to the base directory of the local repository to use for the Maven invocation.
143      *
144      * @param defaultDirectory The default location to use if no location is configured for this request, may be
145      *            <code>null</code>.
146      * @return The path to the base directory of the local repository or <code>null</code> to use the location from the
147      *         <code>settings.xml</code>.
148      */
149     File getLocalRepositoryDirectory( File defaultDirectory );
150 
151     /**
152      * Gets the input stream used to provide input for the invoked Maven build. This is in particular useful when
153      * invoking Maven in interactive mode.
154      *
155      * @param defaultStream the default {@link java.io.InputStream} to use
156      * @return The input stream used to provide input for the invoked Maven build or <code>null</code> if not set.
157      */
158     InputStream getInputStream( InputStream defaultStream );
159 
160     /**
161      * Gets the handler used to capture the standard output from the Maven build.
162      *
163      * @param defaultHandler the default {@link org.apache.maven.shared.invoker.InvocationOutputHandler} to use
164      * @return The output handler or <code>null</code> if not set.
165      */
166     InvocationOutputHandler getOutputHandler( InvocationOutputHandler defaultHandler );
167 
168     /**
169      * Gets the handler used to capture the error output from the Maven build.
170      *
171      * @param defaultHandler the default {@link org.apache.maven.shared.invoker.InvocationOutputHandler} to use
172      * @return The error handler or <code>null</code> if not set.
173      */
174     InvocationOutputHandler getErrorHandler( InvocationOutputHandler defaultHandler );
175 
176     /**
177      * Gets the path to the POM for the Maven invocation. If no base directory is set, the parent directory of this POM
178      * will be used as the working directory for the Maven invocation.
179      *
180      * @return The path to the POM for the Maven invocation or <code>null</code> if not set.
181      */
182     File getPomFile();
183 
184     /**
185      * Gets the (unqualified) filename of the POM for the Maven invocation. This setting is ignored if
186      * {@link #getPomFile()} does not return <code>null</code>. Otherwise, the base directory is assumed to contain a
187      * POM with this name. By default, a file named <code>pom.xml</code> is used.
188      *
189      * @return The (unqualified) filename of the POM for the Maven invocation or <code>null</code> if not set.
190      */
191     String getPomFileName();
192 
193     /**
194      * List of raw line arguments which will be passed to cli.
195      *
196      * @return a list of cli arguments
197      * @since 3.2.0
198      */
199     List<String> getArgs();
200 
201     /**
202      * Gets the path to the base directory of the POM for the Maven invocation. If {@link #getPomFile()} does not return
203      * <code>null</code>, this setting only affects the working directory for the Maven invocation.
204      *
205      * @return The path to the base directory of the POM or <code>null</code> if not set.
206      */
207     File getBaseDirectory();
208 
209     /**
210      * Gets the path to the base directory of the POM for the Maven invocation. If {@link #getPomFile()} does not return
211      * <code>null</code>, this setting only affects the working directory for the Maven invocation.
212      *
213      * @param defaultDirectory The default base directory to use if none is configured for this request, may be
214      *            <code>null</code>.
215      * @return The path to the base directory of the POM or <code>null</code> if not set.
216      */
217     File getBaseDirectory( File defaultDirectory );
218 
219     /**
220      * Gets the path to the base directory of the Java installation used to run Maven.
221      *
222      * @return The path to the base directory of the Java installation used to run Maven or <code>null</code> to use the
223      *         default Java home.
224      */
225     File getJavaHome();
226 
227     /**
228      * Gets the system properties for the Maven invocation.
229      *
230      * @return The system properties for the Maven invocation or <code>null</code> if not set.
231      */
232     Properties getProperties();
233 
234     /**
235      * Gets the goals for the Maven invocation.
236      *
237      * @return The goals for the Maven invocation or <code>null</code> if not set.
238      */
239     List<String> getGoals();
240 
241     /**
242      * Gets the path to the user settings for the Maven invocation.
243      *
244      * @return The path to the user settings for the Maven invocation or <code>null</code> to load the user settings
245      *         from the default location.
246      */
247     File getUserSettingsFile();
248 
249     /**
250      * Gets the path to the global settings for the Maven invocation.
251      *
252      * @return The path to the global settings for the Maven invocation or <code>null</code> to load the global settings
253      *         from the default location.
254      * @since 2.1
255      */
256     File getGlobalSettingsFile();
257 
258     /**
259      * Gets the path to the custom toolchains file
260      *
261      * @return The path to the custom toolchains file or <code>null</code> to load the toolchains from the default
262      *         location
263      * @since 2.1
264      */
265     File getToolchainsFile();
266 
267     /**
268      * Alternate path for the global toolchains file <b>Note. This is available since Maven 3.3.1</b>
269      *
270      * @return The path to the custom global toolchains file or <code>null</code> to load the global toolchains from the
271      *         default location.
272      * @since 3.0.0
273      */
274     File getGlobalToolchainsFile();
275 
276     /**
277      * Gets the checksum mode of the Maven invocation.
278      *
279      * @return The checksum mode, one of {@link CheckSumPolicy#Warn} and {@link CheckSumPolicy#Fail}.
280      * @since 3.0.0
281      */
282     CheckSumPolicy getGlobalChecksumPolicy();
283 
284     /**
285      * Gets the profiles for the Maven invocation.
286      *
287      * @return The profiles for the Maven invocation or <code>null</code> if not set.
288      */
289     List<String> getProfiles();
290 
291     /**
292      * Gets the environment variables for the Maven invocation.
293      *
294      * @return The environment variables for the Maven invocation or <code>null</code> if not set.
295      */
296     Map<String, String> getShellEnvironments();
297 
298     /**
299      * Gets the value of the <code>MAVEN_OPTS</code> environment variable.
300      *
301      * @return The value of the <code>MAVEN_OPTS</code> environment variable or <code>null</code> if not set.
302      */
303     String getMavenOpts();
304 
305     /**
306      * The show version behavior (-V option)
307      *
308      * @return The show version behavior
309      * @since 2.0.11
310      */
311     boolean isShowVersion();
312 
313     /**
314      * Get the value of the {@code threads} argument.
315      *
316      * @return the value of the {@code threads} argument or {@code null} if not set
317      * @since 2.1
318      */
319     String getThreads();
320 
321     /**
322      * Gets the quiet mode of the Maven invocation. By default, Maven is executed in normal mode.
323      *
324      * @return <code>true</code> if Maven should be executed in quiet mode, <code>false</code> if normal mode should
325      *         be used.
326      * @since 3.1.0
327      */
328     boolean isQuiet();
329 
330     /**
331      * Get the value of the {@code no-transfer-progress} argument.
332      *
333      * @return {@code true} if the argument {@code no-transfer-progress} was specified, otherwise {@code false}
334      * @since 3.2.0
335      */
336     boolean isNoTransferProgress();
337 
338     // ----------------------------------------------------------------------
339     // Reactor Failure Mode
340     // ----------------------------------------------------------------------
341 
342     /**
343      * The reactor failure behavior which to be used during Maven invocation.
344      */
345     enum ReactorFailureBehavior
346     {
347         /**
348          * Stop at first failure in reactor builds
349          */
350         FailFast( "ff", "fail-fast" ),
351         /**
352          * Only fail the build afterwards. allow all non-impacted builds to continue.
353          */
354         FailAtEnd( "fae", "fail-at-end" ),
355         /**
356          * <b>NEVER</b> fail the build, regardless of project result
357          */
358         FailNever( "fn", "fail-never" );
359 
360         private String shortOption;
361 
362         private String longOption;
363 
364         ReactorFailureBehavior( String shortOption, String longOption )
365         {
366             this.shortOption = shortOption;
367             this.longOption = longOption;
368         }
369 
370         public String getShortOption()
371         {
372             return this.shortOption;
373         }
374 
375         public String getLongOption()
376         {
377             return this.longOption;
378         }
379 
380         /**
381          * Returns the enumeration type which is related to the given long option.
382          * 
383          * @param longOption The type which is searched for.
384          * @return The appropriate {@link ReactorFailureBehavior}
385          * @throws IllegalArgumentException in case of an long option which does not exists.
386          */
387         public static ReactorFailureBehavior valueOfByLongOption( String longOption )
388         {
389             for ( ReactorFailureBehavior item : ReactorFailureBehavior.values() )
390             {
391                 if ( item.getLongOption().equals( longOption ) )
392                 {
393                     return item;
394                 }
395             }
396             throw new IllegalArgumentException( "The string '" + longOption
397                 + "' can not be converted to enumeration." );
398         }
399     }
400 
401     // ----------------------------------------------------------------------
402     // Artifact repository policies
403     // ----------------------------------------------------------------------
404 
405     /**
406      * The kind of checksum policy which should be used during Maven invocation.
407      */
408     enum CheckSumPolicy
409     {
410 
411         /**
412          * Strict checksum checking equivalent of {@code --strict-checksums}
413          */
414         Fail,
415         /**
416          * Warn checksum failures equivalent {@code --lax-checksums}.
417          */
418         Warn;
419 
420     }
421 
422     // ----------------------------------------------------------------------
423     //
424     // ----------------------------------------------------------------------
425 
426     /**
427      * Sets the interaction mode of the Maven invocation. Equivalent of {@code -B} and {@code --batch-mode}
428      *
429      * @param batchMode <code>true</code> if Maven should be executed in non-interactive mode, <code>false</code> if the
430      *            interactive modes is used.
431      * @return This invocation request.
432      * @since 3.0.0
433      */
434     InvocationRequest setBatchMode( boolean batchMode );
435 
436     /**
437      * Sets the network mode of the Maven invocation. Equivalent of {@code -o} and {@code --offline}
438      *
439      * @param offline <code>true</code> if Maven should be executed in offline mode, <code>false</code> if the online
440      *            mode is used.
441      * @return This invocation request.
442      */
443     InvocationRequest setOffline( boolean offline );
444 
445     /**
446      * Sets the debug mode of the Maven invocation. Equivalent of {@code -X} and {@code --debug}
447      *
448      * @param debug <code>true</code> if Maven should be executed in debug mode, <code>false</code> if the normal mode
449      *            should be used.
450      * @return This invocation request.
451      */
452     InvocationRequest setDebug( boolean debug );
453 
454     /**
455      * Sets the exception output mode of the Maven invocation. Equivalent of {@code -e} and {@code --errors}
456      *
457      * @param showErrors <code>true</code> if Maven should print stack traces, <code>false</code> otherwise.
458      * @return This invocation request.
459      */
460     InvocationRequest setShowErrors( boolean showErrors );
461 
462     /**
463      * Specifies whether Maven should enforce an update check for plugins and snapshots. Equivalent of {@code -U} and
464      * {@code --update-snapshots}
465      *
466      * @param updateSnapshots <code>true</code> if plugins and snapshots should be updated, <code>false</code>
467      *            otherwise.
468      * @return This invocation request.
469      */
470     InvocationRequest setUpdateSnapshots( boolean updateSnapshots );
471 
472     /**
473      * Sets the failure mode of the Maven invocation. Equivalent of {@code -ff} and {@code --fail-fast}, {@code -fae}
474      * and {@code --fail-at-end}, {@code -fn} and {@code --fail-never}
475      *
476      * @param failureBehavior The failure mode, must be one of {@link ReactorFailureBehavior#FailFast},
477      *            {@link ReactorFailureBehavior#FailAtEnd} and {@link ReactorFailureBehavior#FailNever}.
478      * @return This invocation request.
479      * @since 3.0.0
480      */
481     InvocationRequest setReactorFailureBehavior( ReactorFailureBehavior failureBehavior );
482 
483     /**
484      * Sets the path to the base directory of the local repository to use for the Maven invocation.
485      *
486      * @param localRepository The path to the base directory of the local repository, may be <code>null</code>.
487      * @return This invocation request.
488      */
489     InvocationRequest setLocalRepositoryDirectory( File localRepository );
490 
491     /**
492      * Sets the input stream used to provide input for the invoked Maven build. This is in particular useful when
493      * invoking Maven in interactive mode.
494      *
495      * @param inputStream The input stream used to provide input for the invoked Maven build, may be <code>null</code>
496      *            if not required.
497      * @return This invocation request.
498      */
499     InvocationRequest setInputStream( InputStream inputStream );
500 
501     /**
502      * Sets the handler used to capture the standard output from the Maven build.
503      *
504      * @param outputHandler The output handler, may be <code>null</code> if the output is not of interest.
505      * @return This invocation request.
506      */
507     InvocationRequest setOutputHandler( InvocationOutputHandler outputHandler );
508 
509     /**
510      * Sets the handler used to capture the error output from the Maven build.
511      *
512      * @param errorHandler The error handler, may be <code>null</code> if the output is not of interest.
513      * @return This invocation request.
514      */
515     InvocationRequest setErrorHandler( InvocationOutputHandler errorHandler );
516 
517     /**
518      * Sets the path to the POM for the Maven invocation. If no base directory is set, the parent directory of this POM
519      * will be used as the working directory for the Maven invocation.
520      *
521      * @param pomFile The path to the POM for the Maven invocation, may be <code>null</code> if not used.
522      * @return This invocation request.
523      */
524     InvocationRequest setPomFile( File pomFile );
525 
526     /**
527      * Sets the (unqualified) filename of the POM for the Maven invocation. This setting is ignored if
528      * {@link #getPomFile()} does not return <code>null</code>. Otherwise, the base directory is assumed to contain a
529      * POM with this name.
530      *
531      * @param pomFilename The (unqualified) filename of the POM for the Maven invocation, may be <code>null</code> if
532      *            not used.
533      * @return This invocation request.
534      */
535     InvocationRequest setPomFileName( String pomFilename );
536 
537     /**
538      * Add a raw  argument to Maven  cli command at the end of other arguments.
539      * Can be called multiple time in order to add many arguments.
540      *
541      * @param arg a raw Maven arg line
542      * @return This invocation request.
543      * @since 3.2.0
544      */
545     InvocationRequest addArg( String arg );
546 
547     /**
548      * Sets the path to the base directory of the POM for the Maven invocation. If {@link #getPomFile()} does not return
549      * <code>null</code>, this setting only affects the working directory for the Maven invocation.
550      *
551      * @param basedir The path to the base directory of the POM, may be <code>null</code> if not used.
552      * @return This invocation request.
553      */
554     InvocationRequest setBaseDirectory( File basedir );
555 
556     /**
557      * Sets the path to the base directory of the Java installation used to run Maven.
558      *
559      * @param javaHome The path to the base directory of the Java installation used to run Maven, may be
560      *            <code>null</code> to use the default Java home.
561      * @return This invocation request.
562      */
563     InvocationRequest setJavaHome( File javaHome );
564 
565     /**
566      * Sets the system properties for the Maven invocation.
567      *
568      * @param properties The system properties for the Maven invocation, may be <code>null</code> if not set.
569      * @return This invocation request.
570      */
571     InvocationRequest setProperties( Properties properties );
572 
573     /**
574      * Sets the goals for the Maven invocation.
575      *
576      * @param goals The goals for the Maven invocation, may be <code>null</code> to execute the POMs default goal.
577      * @return This invocation request.
578      */
579     InvocationRequest setGoals( List<String> goals );
580 
581     /**
582      * Sets the profiles for the Maven invocation. Equivalent of {@code -P} and {@code --active-profiles}
583      *
584      * @param profiles The profiles for the Maven invocation, may be <code>null</code> to use the default profiles.
585      * @return This invocation request.
586      */
587     InvocationRequest setProfiles( List<String> profiles );
588 
589     /**
590      * Specifies whether the environment variables of the current process should be propagated to the Maven invocation.
591      *
592      * @param shellEnvironmentInherited <code>true</code> if the environment variables should be propagated,
593      *            <code>false</code> otherwise.
594      * @return This invocation request.
595      */
596     InvocationRequest setShellEnvironmentInherited( boolean shellEnvironmentInherited );
597 
598     /**
599      * Sets the path to the user settings for the Maven invocation. Equivalent of {@code -s} and {@code --settings}
600      *
601      * @param userSettings The path to the user settings for the Maven invocation, may be <code>null</code> to load the
602      *            user settings from the default location.
603      * @return This invocation request.
604      */
605     InvocationRequest setUserSettingsFile( File userSettings );
606 
607     /**
608      * Sets the path to the global settings for the Maven invocation. Equivalent of {@code -gs} and
609      * {@code --global-settings}
610      *
611      * @param globalSettings The path to the global settings for the Maven invocation, may be <code>null</code> to load
612      *            the global settings from the default location.
613      * @return This invocation request.
614      * @since 2.1
615      */
616     InvocationRequest setGlobalSettingsFile( File globalSettings );
617 
618     /**
619      * Sets the alternate path for the user toolchains file Equivalent of {@code -t} or {@code --toolchains}
620      *
621      * @param toolchains the alternate path for the user toolchains file
622      * @return This invocation request
623      * @since 2.1
624      */
625     InvocationRequest setToolchainsFile( File toolchains );
626 
627     /**
628      * Sets the alternate path for the global toolchains file Equivalent of {@code -gt} or {@code --global-toolchains}
629      *
630      * @param toolchains the alternate path for the global toolchains file
631      * @return This invocation request
632      * @since 3.0.0
633      */
634     InvocationRequest setGlobalToolchainsFile( File toolchains );
635 
636     /**
637      * Sets the checksum mode of the Maven invocation. Equivalent of {@code -c} or {@code --lax-checksums}, {@code -C}
638      * or {@code --strict-checksums}
639      *
640      * @param globalChecksumPolicy The checksum mode, must be one of {@link CheckSumPolicy#Warn} and
641      *            {@link CheckSumPolicy#Fail}.
642      * @return This invocation request.
643      * @since 3.0.0
644      */
645     InvocationRequest setGlobalChecksumPolicy( CheckSumPolicy globalChecksumPolicy );
646 
647     /**
648      * Specifies whether Maven should check for plugin updates.
649      * <p>
650      * Equivalent of {@code -npu} or {@code --no-plugin-updates}
651      * </p>
652      * <p>
653      * <strong>note: </strong>Ineffective with Maven3, only kept for backward compatibility
654      * </p>
655      *
656      * @param nonPluginUpdates <code>true</code> if plugin updates should be suppressed, <code>false</code> otherwise.
657      * @return This invocation request.
658      */
659     InvocationRequest setNonPluginUpdates( boolean nonPluginUpdates );
660 
661     /**
662      * Sets the recursion behavior of a reactor invocation. <em>Inverse</em> equivalent of {@code -N} and
663      * {@code --non-recursive}
664      *
665      * @param recursive <code>true</code> if sub modules should be build, <code>false</code> otherwise.
666      * @return This invocation request.
667      */
668     InvocationRequest setRecursive( boolean recursive );
669 
670     /**
671      * Adds the specified environment variable to the Maven invocation.
672      *
673      * @param name The name of the environment variable, must not be <code>null</code>.
674      * @param value The value of the environment variable, must not be <code>null</code>.
675      * @return This invocation request.
676      */
677     InvocationRequest addShellEnvironment( String name, String value );
678 
679     /**
680      * Sets the value of the <code>MAVEN_OPTS</code> environment variable.
681      *
682      * @param mavenOpts The value of the <code>MAVEN_OPTS</code> environment variable, may be <code>null</code> to use
683      *            the default options.
684      * @return This invocation request.
685      */
686     InvocationRequest setMavenOpts( String mavenOpts );
687 
688     /**
689      * enable displaying version without stopping the build Equivalent of {@code -V} or {@code --show-version}
690      *
691      * @param showVersion enable displaying version
692      * @return This invocation request.
693      * @since 2.0.11
694      */
695     InvocationRequest setShowVersion( boolean showVersion );
696 
697     /**
698      * Thread count, for instance 2.0C where C is core multiplied Equivalent of {@code -T} or {@code --threads}
699      * <p>
700      * <strong>note: </strong>available since Maven3
701      * </p>
702      *
703      * @param threads the threadcount
704      * @return This invocation request.
705      * @since 2.1
706      */
707     InvocationRequest setThreads( String threads );
708 
709     /**
710      * Sets the reactor project list. Equivalent of {@code -pl} or {@code --projects}
711      *
712      * @param projects the reactor project list
713      * @return This invocation request.
714      * @since 2.1
715      */
716     InvocationRequest setProjects( List<String> projects );
717 
718     /**
719      * Enable the 'also make' mode. Equivalent of {@code -am} or {@code --also-make}
720      *
721      * @param alsoMake enable 'also make' mode
722      * @return This invocation request.
723      * @since 2.1
724      */
725     InvocationRequest setAlsoMake( boolean alsoMake );
726 
727     /**
728      * Enable the 'also make dependents' mode. Equivalent of {@code -amd} or {@code --also-make-dependents}
729      *
730      * @param alsoMakeDependents enable 'also make' mode
731      * @return This invocation request.
732      * @since 2.1
733      */
734     InvocationRequest setAlsoMakeDependents( boolean alsoMakeDependents );
735 
736     /**
737      * Resume reactor from specified project. Equivalent of {@code -rf} or {@code --resume-from}
738      *
739      * @param resumeFrom set the project to resume from
740      * @return This invocation request
741      * @since 2.1
742      */
743     InvocationRequest setResumeFrom( String resumeFrom );
744 
745     /**
746      * The id of the build strategy to use. equivalent of {@code -b id} or {@code --builder id}.
747      * <b>Note. This is available since Maven 3.2.1</b>
748      *
749      * @param id The builder id.
750      * @return {@link InvocationRequest}
751      * @since 3.0.0
752      */
753     InvocationRequest setBuilder( String id );
754 
755     /**
756      * Sets the quiet mode of the Maven invocation. Equivalent of {@code -q} and {@code --quiet}
757      *
758      * @param quiet <code>true</code> if Maven should be executed in quiet mode, <code>false</code> if the normal mode
759      *            should be used.
760      * @return This invocation request.
761      * @since 3.1.0
762      */
763     InvocationRequest setQuiet( boolean quiet );
764 
765     /**
766      * Enable no transfer progress mode. Equivalent of {@code -ntp} or {@code --no-transfer-progress}
767      * @param noTransferProgress enable no transfer progress mode
768      * @return This invocation request.
769      * @since 3.2.0
770      */
771     InvocationRequest setNoTransferProgress( boolean noTransferProgress );
772 
773     /**
774      * Get the current set builder strategy id equivalent of {@code --builder id}. <b>Note. This is available since
775      * Maven 3.2.1</b>
776      *
777      * @return The current set builder id.
778      * @since 3.0.0
779      */
780     String getBuilder();
781 
782     /** Constant <code>NO_TIMEOUT=0</code> */
783     int NO_TIMEOUT = 0;
784     /**
785      * <p>getTimeoutInSeconds.</p>
786      *
787      * @since 3.0.1
788      * @return the timeout in seconds to execute the project
789      */
790     int getTimeoutInSeconds();
791 
792     /**
793      * <p>setTimeoutInSeconds.</p>
794      *
795      * @since 3.0.1
796      * @param timeoutInSeconds the timeout in seconds to execute the project
797      */
798     void setTimeoutInSeconds( int timeoutInSeconds );
799 
800     /**
801      * Gets the path to the base directory of the Maven installation used to invoke Maven.
802      *
803      * @return The path to the base directory of the Maven installation or <code>null</code> if using the default
804      *         Maven installation.
805      *
806      * @since 3.2.0
807      */
808     File getMavenHome();
809 
810     /**
811      * Sets the path to the base directory of the Maven installation used to invoke Maven. This parameter may be left
812      * unspecified to use the default Maven installation which will be discovered by evaluating the system property
813      * <code>maven.home</code>.
814      *
815      * @param mavenHome The path to the base directory of the Maven installation, may be <code>null</code> to use the
816      *            default Maven installation.
817      * @return This invocation request
818      *
819      * @since 3.2.0
820      */
821     InvocationRequest setMavenHome( File mavenHome );
822 
823     /**
824      * Get the customized File of the Maven executable.
825      *
826      * @return the custom Maven executable, otherwise {@code null}
827      *
828      * @since 3.2.0
829      */
830     File getMavenExecutable();
831 
832     /**
833      * {@code mavenExecutable} can either be a file relative to ${maven.home}/bin/ or an absolute file.
834      *
835      * @param mavenExecutable the executable
836      * @return This invocation request
837      *
838      * @since 3.2.0
839      */
840     InvocationRequest setMavenExecutable( File mavenExecutable );
841 }