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.api.cli.mvn;
20  
21  import java.util.List;
22  import java.util.Optional;
23  
24  import org.apache.maven.api.annotations.Experimental;
25  import org.apache.maven.api.annotations.Nonnull;
26  import org.apache.maven.api.cli.Options;
27  
28  /**
29   * Defines the options specific to Maven operations.
30   * This interface extends the general {@link Options} interface, adding Maven-specific configuration options.
31   *
32   * <p>These options represent the various flags and settings available through the Maven CLI,
33   * as well as those that can be specified in the {@code maven.config} file. They provide fine-grained
34   * control over Maven's behavior during the build process.</p>
35   *
36   * @since 4.0.0
37   */
38  @Experimental
39  public interface MavenOptions extends Options {
40  
41      /**
42       * Returns the path to an alternate POM file.
43       *
44       * @return an {@link Optional} containing the path to the alternate POM file, or empty if not specified
45       */
46      @Nonnull
47      Optional<String> alternatePomFile();
48  
49      /**
50       * Indicates whether Maven should operate in non-recursive mode (i.e., not build child modules).
51       *
52       * @return an {@link Optional} containing true if non-recursive mode is enabled, false if disabled, or empty if not specified
53       */
54      @Nonnull
55      Optional<Boolean> nonRecursive();
56  
57      /**
58       * Indicates whether Maven should force a check for updated snapshots on remote repositories.
59       *
60       * @return an {@link Optional} containing true if snapshot updates should be forced, false if not, or empty if not specified
61       */
62      @Nonnull
63      Optional<Boolean> updateSnapshots();
64  
65      /**
66       * Returns the list of profiles to activate.
67       *
68       * @return an {@link Optional} containing the list of profile names to activate, or empty if not specified
69       */
70      @Nonnull
71      Optional<List<String>> activatedProfiles();
72  
73      /**
74       * Indicates whether Maven should suppress SNAPSHOT updates.
75       *
76       * @return an {@link Optional} containing true if SNAPSHOT updates should be suppressed, false if not, or empty if not specified
77       */
78      @Nonnull
79      Optional<Boolean> suppressSnapshotUpdates();
80  
81      /**
82       * Indicates whether Maven should use strict checksum verification.
83       *
84       * @return an {@link Optional} containing true if strict checksum verification is enabled, false if not, or empty if not specified
85       */
86      @Nonnull
87      Optional<Boolean> strictChecksums();
88  
89      /**
90       * Indicates whether Maven should use relaxed checksum verification.
91       *
92       * @return an {@link Optional} containing true if relaxed checksum verification is enabled, false if not, or empty if not specified
93       */
94      @Nonnull
95      Optional<Boolean> relaxedChecksums();
96  
97      /**
98       * Indicates whether Maven should stop at the first failure in a multi-module build.
99       *
100      * @return an {@link Optional} containing true if Maven should stop at the first failure, false if not, or empty if not specified
101      */
102     @Nonnull
103     Optional<Boolean> failFast();
104 
105     /**
106      * Indicates whether Maven should run all builds but defer error reporting to the end.
107      *
108      * @return an {@link Optional} containing true if error reporting should be deferred to the end, false if not, or empty if not specified
109      */
110     @Nonnull
111     Optional<Boolean> failAtEnd();
112 
113     /**
114      * Indicates whether Maven should never fail the build, regardless of project result.
115      *
116      * @return an {@link Optional} containing true if the build should never fail, false if it should fail normally, or empty if not specified
117      */
118     @Nonnull
119     Optional<Boolean> failNever();
120 
121     /**
122      * Indicates whether Maven should resume from the last failed project in a previous build.
123      *
124      * @return an {@link Optional} containing true if Maven should resume from the last failure, false if not, or empty if not specified
125      */
126     @Nonnull
127     Optional<Boolean> resume();
128 
129     /**
130      * Returns the project to resume the build from.
131      *
132      * @return an {@link Optional} containing the project name to resume from, or empty if not specified
133      */
134     @Nonnull
135     Optional<String> resumeFrom();
136 
137     /**
138      * Returns the list of specified reactor projects to build instead of all projects.
139      *
140      * @return an {@link Optional} containing the list of project names to build, or empty if not specified
141      */
142     @Nonnull
143     Optional<List<String>> projects();
144 
145     /**
146      * Indicates whether Maven should also build the specified projects' dependencies.
147      *
148      * @return an {@link Optional} containing true if dependencies should also be built, false if not, or empty if not specified
149      */
150     @Nonnull
151     Optional<Boolean> alsoMake();
152 
153     /**
154      * Indicates whether Maven should also build the specified projects' dependents.
155      *
156      * @return an {@link Optional} containing true if dependents should also be built, false if not, or empty if not specified
157      */
158     @Nonnull
159     Optional<Boolean> alsoMakeDependents();
160 
161     /**
162      * Returns the number of threads used for parallel builds.
163      *
164      * @return an {@link Optional} containing the number of threads (or "1C" for one thread per CPU core), or empty if not specified
165      */
166     @Nonnull
167     Optional<String> threads();
168 
169     /**
170      * Returns the id of the build strategy to use.
171      *
172      * @return an {@link Optional} containing the id of the build strategy, or empty if not specified
173      */
174     @Nonnull
175     Optional<String> builder();
176 
177     /**
178      * Indicates whether Maven should not display transfer progress when downloading or uploading.
179      *
180      * @return an {@link Optional} containing true if transfer progress should not be displayed, false if it should, or empty if not specified
181      */
182     @Nonnull
183     Optional<Boolean> noTransferProgress();
184 
185     /**
186      * Indicates whether Maven should cache the "not found" status of artifacts that were not found in remote repositories.
187      *
188      * @return an {@link Optional} containing true if "not found" status should be cached, false if not, or empty if not specified
189      */
190     @Nonnull
191     Optional<Boolean> cacheArtifactNotFound();
192 
193     /**
194      * Indicates whether Maven should use strict artifact descriptor policy.
195      *
196      * @return an {@link Optional} containing true if strict artifact descriptor policy should be used, false if not, or empty if not specified
197      */
198     @Nonnull
199     Optional<Boolean> strictArtifactDescriptorPolicy();
200 
201     /**
202      * Indicates whether Maven should ignore transitive repositories.
203      *
204      * @return an {@link Optional} containing true if transitive repositories should be ignored, false if not, or empty if not specified
205      */
206     @Nonnull
207     Optional<Boolean> ignoreTransitiveRepositories();
208 
209     /**
210      * Specifies "@file"-like file, to load up command line from. It may contain goals as well. Format is one parameter
211      * per line (similar to {@code maven.conf}) and {@code '#'} (hash) marked comment lines are allowed. Goals, if
212      * present, are appended, to those specified on CLI input, if any.
213      */
214     Optional<String> atFile();
215 
216     /**
217      * Returns the list of goals and phases to execute.
218      *
219      * @return an {@link Optional} containing the list of goals and phases to execute, or empty if not specified
220      */
221     @Nonnull
222     Optional<List<String>> goals();
223 }