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.model.building;
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.Properties;
26  
27  import org.apache.maven.model.Model;
28  import org.apache.maven.model.Profile;
29  import org.apache.maven.model.resolution.ModelResolver;
30  import org.apache.maven.model.resolution.WorkspaceModelResolver;
31  
32  /**
33   * Collects settings that control the building of effective models.
34   *
35   */
36  public interface ModelBuildingRequest {
37  
38      /**
39       * Denotes minimal validation of POMs. This validation level is meant for processing of POMs from repositories
40       * during metadata retrieval.
41       */
42      int VALIDATION_LEVEL_MINIMAL = 0;
43  
44      /**
45       * Denotes validation as performed by Maven 2.0. This validation level is meant as a compatibility mode to allow
46       * users to migrate their projects.
47       */
48      int VALIDATION_LEVEL_MAVEN_2_0 = 20;
49  
50      /**
51       * Denotes validation as performed by Maven 3.0. This validation level is meant for existing projects.
52       */
53      int VALIDATION_LEVEL_MAVEN_3_0 = 30;
54  
55      /**
56       * Denotes validation as performed by Maven 3.1. This validation level is meant for existing projects.
57       */
58      int VALIDATION_LEVEL_MAVEN_3_1 = 31;
59  
60      /**
61       * Denotes validation as performed by Maven 4.0. This validation level is meant for new projects.
62       */
63      int VALIDATION_LEVEL_MAVEN_4_0 = 40;
64  
65      /**
66       * Denotes strict validation as recommended by the current Maven version.
67       */
68      int VALIDATION_LEVEL_STRICT = VALIDATION_LEVEL_MAVEN_4_0;
69  
70      /**
71       * Gets the file model to build (with profile activation).
72       * If not set, model source will be used to load file model.
73       *
74       * @return The file model to build or {@code null} if not set.
75       * @since 4.0.0
76       */
77      Model getFileModel();
78  
79      /**
80       * Set the file model with profile activation
81       *
82       * @param fileModel
83       * @return This request, never {@code null}.
84       * @since 4.0.0
85       */
86      ModelBuildingRequest setFileModel(Model fileModel);
87  
88      /**
89       * @deprecated rawModel is never set, instead the fileModel is set
90       */
91      @Deprecated
92      Model getRawModel();
93  
94      /**
95       * @deprecated setting the rawModel has no effect, instead the fileModel of phase one will be set
96       */
97      @Deprecated
98      ModelBuildingRequest setRawModel(Model rawModel);
99  
100     /**
101      * Gets the source of the POM to process.
102      *
103      * @return The source of the POM or {@code null} if not set.
104      */
105     ModelSource getModelSource();
106 
107     /**
108      * Sets the source of the POM to process. Eventually, either {@link #setModelSource(ModelSource)} or
109      * {@link #setPomPath(Path)} must be set.
110      *
111      * @param modelSource The source of the POM to process, may be {@code null}.
112      * @return This request, never {@code null}.
113      */
114     ModelBuildingRequest setModelSource(ModelSource modelSource);
115 
116     /**
117      * Gets the POM file of the project to build.
118      *
119      * @return The POM file of the project or {@code null} if not applicable (i.e. when processing a POM from the
120      *         repository).
121      * @deprecated Use {@link #getPomPath()} instead.
122      */
123     @Deprecated
124     File getPomFile();
125 
126     /**
127      * Gets the POM file of the project to build.
128      *
129      * @return The POM file of the project or {@code null} if not applicable (i.e. when processing a POM from the
130      *         repository).
131      * @since 4.0.0
132      */
133     Path getPomPath();
134 
135     /**
136      * Sets the POM file of the project to build. Note that providing the path to a POM file via this method will make
137      * the model builder operate in project mode. This mode is meant for effective models that are employed during the
138      * build process of a local project. Hence the effective model will support the notion of a project directory. To
139      * build the model for a POM from the repository, use {@link #setModelSource(ModelSource)} in combination with a
140      * {@link FileModelSource} instead.
141      *
142      * @param pomFile The POM file of the project to build the effective model for, may be {@code null} to build the
143      *            model of some POM from the repository.
144      * @return This request, never {@code null}.
145      * @deprecated Use {@link #setPomPath(Path)} instead.
146      */
147     @Deprecated
148     ModelBuildingRequest setPomFile(File pomFile);
149 
150     /**
151      * Sets the POM file of the project to build. Note that providing the path to a POM file via this method will make
152      * the model builder operate in project mode. This mode is meant for effective models that are employed during the
153      * build process of a local project. Hence the effective model will support the notion of a project directory. To
154      * build the model for a POM from the repository, use {@link #setModelSource(ModelSource)} in combination with a
155      * {@link FileModelSource} instead.
156      *
157      * @param pomPath The POM file of the project to build the effective model for, may be {@code null} to build the
158      *            model of some POM from the repository.
159      * @return This request, never {@code null}.
160      * @since 4.0.0
161      */
162     ModelBuildingRequest setPomPath(Path pomPath);
163 
164     /**
165      * Gets the level of validation to perform on processed models.
166      *
167      * @return The level of validation to perform on processed models.
168      */
169     int getValidationLevel();
170 
171     /**
172      * Sets the level of validation to perform on processed models. For building of projects,
173      * {@link #VALIDATION_LEVEL_STRICT} should be used to ensure proper building. For the mere retrieval of dependencies
174      * during artifact resolution, {@link #VALIDATION_LEVEL_MINIMAL} should be used to account for models of poor
175      * quality. By default, models are validated in strict mode.
176      *
177      * @param validationLevel The level of validation to perform on processed models.
178      * @return This request, never {@code null}.
179      */
180     ModelBuildingRequest setValidationLevel(int validationLevel);
181 
182     /**
183      * Indicates whether plugin executions and configurations should be processed. If enabled, lifecycle-induced plugin
184      * executions will be injected into the model and common plugin configuration will be propagated to individual
185      * executions.
186      *
187      * @return {@code true} if plugins should be processed, {@code false} otherwise.
188      */
189     boolean isProcessPlugins();
190 
191     /**
192      * Controls the processing of plugin executions and configurations.
193      *
194      * @param processPlugins {@code true} to enable plugin processing, {@code false} otherwise.
195      * @return This request, never {@code null}.
196      */
197     ModelBuildingRequest setProcessPlugins(boolean processPlugins);
198 
199     /**
200      * Indicates whether the model building should happen in two phases. If enabled, the initial invocation of the model
201      * builder will only produce an interim result which may be used to analyze inter-model dependencies before the
202      * final invocation of the model builder is performed.
203      *
204      * @return {@code true} if two-phase building is enabled, {@code false} if the model should be build in a single
205      *         step.
206      */
207     boolean isTwoPhaseBuilding();
208 
209     /**
210      * Enables/disables two-phase building. If enabled, the initial invocation of the model builder will only produce an
211      * interim result which may be used to analyze inter-model dependencies before the final invocation of the model
212      * builder is performed.
213      *
214      * @param twoPhaseBuilding {@code true} to enable two-phase building, {@code false} if the model should be build in
215      *            a single step.
216      * @return This request, never {@code null}.
217      */
218     ModelBuildingRequest setTwoPhaseBuilding(boolean twoPhaseBuilding);
219 
220     /**
221      * Indicates whether the model should track the line/column number of the model source from which it was parsed.
222      *
223      * @return {@code true} if location tracking is enabled, {@code false} otherwise.
224      */
225     boolean isLocationTracking();
226 
227     /**
228      * Enables/disables the tracking of line/column numbers for the model source being parsed. By default, input
229      * locations are not tracked.
230      *
231      * @param locationTracking {@code true} to enable location tracking, {@code false} to disable it.
232      * @return This request, never {@code null}.
233      */
234     ModelBuildingRequest setLocationTracking(boolean locationTracking);
235 
236     /**
237      * Gets the external profiles that should be considered for model building.
238      *
239      * @return The external profiles that should be considered for model building, never {@code null}.
240      */
241     List<Profile> getProfiles();
242 
243     /**
244      * Sets the external profiles that should be considered for model building.
245      *
246      * @param profiles The external profiles that should be considered for model building, may be {@code null}.
247      * @return This request, never {@code null}.
248      */
249     ModelBuildingRequest setProfiles(List<Profile> profiles);
250 
251     /**
252      * Gets the identifiers of those profiles that should be activated by explicit demand.
253      *
254      * @return The identifiers of those profiles to activate, never {@code null}.
255      */
256     List<String> getActiveProfileIds();
257 
258     /**
259      * Sets the identifiers of those profiles that should be activated by explicit demand.
260      *
261      * @param activeProfileIds The identifiers of those profiles to activate, may be {@code null}.
262      * @return This request, never {@code null}.
263      */
264     ModelBuildingRequest setActiveProfileIds(List<String> activeProfileIds);
265 
266     /**
267      * Gets the identifiers of those profiles that should be deactivated by explicit demand.
268      *
269      * @return The identifiers of those profiles to deactivate, never {@code null}.
270      */
271     List<String> getInactiveProfileIds();
272 
273     /**
274      * Sets the identifiers of those profiles that should be deactivated by explicit demand.
275      *
276      * @param inactiveProfileIds The identifiers of those profiles to deactivate, may be {@code null}.
277      * @return This request, never {@code null}.
278      */
279     ModelBuildingRequest setInactiveProfileIds(List<String> inactiveProfileIds);
280 
281     /**
282      * Gets the system properties to use for interpolation and profile activation. The system properties are collected
283      * from the runtime environment like {@link System#getProperties()} and environment variables.
284      *
285      * @return The system properties, never {@code null}.
286      */
287     Properties getSystemProperties();
288 
289     /**
290      * Sets the system properties to use for interpolation and profile activation. The system properties are collected
291      * from the runtime environment like {@link System#getProperties()} and environment variables.
292      *
293      * @param systemProperties The system properties, may be {@code null}.
294      * @return This request, never {@code null}.
295      */
296     ModelBuildingRequest setSystemProperties(Properties systemProperties);
297 
298     /**
299      * Gets the user properties to use for interpolation and profile activation. The user properties have been
300      * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
301      * line.
302      *
303      * @return The user properties, never {@code null}.
304      */
305     Properties getUserProperties();
306 
307     /**
308      * Sets the user properties to use for interpolation and profile activation. The user properties have been
309      * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
310      * line.
311      *
312      * @param userProperties The user properties, may be {@code null}.
313      * @return This request, never {@code null}.
314      */
315     ModelBuildingRequest setUserProperties(Properties userProperties);
316 
317     /**
318      * Gets the start time of the build.
319      *
320      * @return The start time of the build or {@code null} if unknown.
321      */
322     Date getBuildStartTime();
323 
324     /**
325      * Sets the start time of the build.
326      *
327      * @param buildStartTime The start time of the build, may be {@code null}.
328      * @return This request, never {@code null}.
329      */
330     ModelBuildingRequest setBuildStartTime(Date buildStartTime);
331 
332     /**
333      * Gets the model resolver to use for resolution of mixins or parents that are not locally reachable from the
334      * project directory.
335      *
336      * @return The model resolver or {@code null} if not set.
337      */
338     ModelResolver getModelResolver();
339 
340     /**
341      * Sets the model resolver to use for resolution of mixins or parents that are not locally reachable from the
342      * project directory.
343      *
344      * @param modelResolver The model resolver to use, never {@code null}.
345      * @return This request, never {@code null}.
346      */
347     ModelBuildingRequest setModelResolver(ModelResolver modelResolver);
348 
349     /**
350      * Gets the model building listener to notify during the build process.
351      *
352      * @return The model building listener to notify or {@code null} if none.
353      */
354     ModelBuildingListener getModelBuildingListener();
355 
356     /**
357      * Sets the model building listener to notify during the build process.
358      *
359      * @param modelBuildingListener The model building listener to notify, may be {@code null}.
360      * @return This request, never {@code null}.
361      */
362     ModelBuildingRequest setModelBuildingListener(ModelBuildingListener modelBuildingListener);
363 
364     /**
365      * Gets the model cache to use for reuse of previously built models.
366      *
367      * @return The model cache or {@code null} if not set.
368      */
369     ModelCache getModelCache();
370 
371     /**
372      * Sets the model cache to use for reuse of previously built models. This is an optional component that serves
373      * performance optimizations.
374      *
375      * @param modelCache The model cache to use, may be {@code null}.
376      * @return This request, never {@code null}.
377      */
378     ModelBuildingRequest setModelCache(ModelCache modelCache);
379 
380     WorkspaceModelResolver getWorkspaceModelResolver();
381 
382     ModelBuildingRequest setWorkspaceModelResolver(WorkspaceModelResolver workspaceResolver);
383 
384     TransformerContextBuilder getTransformerContextBuilder();
385 
386     ModelBuildingRequest setTransformerContextBuilder(TransformerContextBuilder contextBuilder);
387 
388     Path getRootDirectory();
389 
390     ModelBuildingRequest setRootDirectory(Path rootDirectory);
391 }