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 #setPomFile(File)} 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      */
122     File getPomFile();
123 
124     /**
125      * Sets the POM file of the project to build. Note that providing the path to a POM file via this method will make
126      * the model builder operate in project mode. This mode is meant for effective models that are employed during the
127      * build process of a local project. Hence the effective model will support the notion of a project directory. To
128      * build the model for a POM from the repository, use {@link #setModelSource(ModelSource)} in combination with a
129      * {@link FileModelSource} instead.
130      *
131      * @param pomFile The POM file of the project to build the effective model for, may be {@code null} to build the
132      *            model of some POM from the repository.
133      * @return This request, never {@code null}.
134      */
135     ModelBuildingRequest setPomFile(File pomFile);
136 
137     /**
138      * Gets the level of validation to perform on processed models.
139      *
140      * @return The level of validation to perform on processed models.
141      */
142     int getValidationLevel();
143 
144     /**
145      * Sets the level of validation to perform on processed models. For building of projects,
146      * {@link #VALIDATION_LEVEL_STRICT} should be used to ensure proper building. For the mere retrieval of dependencies
147      * during artifact resolution, {@link #VALIDATION_LEVEL_MINIMAL} should be used to account for models of poor
148      * quality. By default, models are validated in strict mode.
149      *
150      * @param validationLevel The level of validation to perform on processed models.
151      * @return This request, never {@code null}.
152      */
153     ModelBuildingRequest setValidationLevel(int validationLevel);
154 
155     /**
156      * Indicates whether plugin executions and configurations should be processed. If enabled, lifecycle-induced plugin
157      * executions will be injected into the model and common plugin configuration will be propagated to individual
158      * executions.
159      *
160      * @return {@code true} if plugins should be processed, {@code false} otherwise.
161      */
162     boolean isProcessPlugins();
163 
164     /**
165      * Controls the processing of plugin executions and configurations.
166      *
167      * @param processPlugins {@code true} to enable plugin processing, {@code false} otherwise.
168      * @return This request, never {@code null}.
169      */
170     ModelBuildingRequest setProcessPlugins(boolean processPlugins);
171 
172     /**
173      * Indicates whether the model building should happen in two phases. If enabled, the initial invocation of the model
174      * builder will only produce an interim result which may be used to analyze inter-model dependencies before the
175      * final invocation of the model builder is performed.
176      *
177      * @return {@code true} if two-phase building is enabled, {@code false} if the model should be build in a single
178      *         step.
179      */
180     boolean isTwoPhaseBuilding();
181 
182     /**
183      * Enables/disables two-phase building. If enabled, the initial invocation of the model builder will only produce an
184      * interim result which may be used to analyze inter-model dependencies before the final invocation of the model
185      * builder is performed.
186      *
187      * @param twoPhaseBuilding {@code true} to enable two-phase building, {@code false} if the model should be build in
188      *            a single step.
189      * @return This request, never {@code null}.
190      */
191     ModelBuildingRequest setTwoPhaseBuilding(boolean twoPhaseBuilding);
192 
193     /**
194      * Indicates whether the model should track the line/column number of the model source from which it was parsed.
195      *
196      * @return {@code true} if location tracking is enabled, {@code false} otherwise.
197      */
198     boolean isLocationTracking();
199 
200     /**
201      * Enables/disables the tracking of line/column numbers for the model source being parsed. By default, input
202      * locations are not tracked.
203      *
204      * @param locationTracking {@code true} to enable location tracking, {@code false} to disable it.
205      * @return This request, never {@code null}.
206      */
207     ModelBuildingRequest setLocationTracking(boolean locationTracking);
208 
209     /**
210      * Gets the external profiles that should be considered for model building.
211      *
212      * @return The external profiles that should be considered for model building, never {@code null}.
213      */
214     List<Profile> getProfiles();
215 
216     /**
217      * Sets the external profiles that should be considered for model building.
218      *
219      * @param profiles The external profiles that should be considered for model building, may be {@code null}.
220      * @return This request, never {@code null}.
221      */
222     ModelBuildingRequest setProfiles(List<Profile> profiles);
223 
224     /**
225      * Gets the identifiers of those profiles that should be activated by explicit demand.
226      *
227      * @return The identifiers of those profiles to activate, never {@code null}.
228      */
229     List<String> getActiveProfileIds();
230 
231     /**
232      * Sets the identifiers of those profiles that should be activated by explicit demand.
233      *
234      * @param activeProfileIds The identifiers of those profiles to activate, may be {@code null}.
235      * @return This request, never {@code null}.
236      */
237     ModelBuildingRequest setActiveProfileIds(List<String> activeProfileIds);
238 
239     /**
240      * Gets the identifiers of those profiles that should be deactivated by explicit demand.
241      *
242      * @return The identifiers of those profiles to deactivate, never {@code null}.
243      */
244     List<String> getInactiveProfileIds();
245 
246     /**
247      * Sets the identifiers of those profiles that should be deactivated by explicit demand.
248      *
249      * @param inactiveProfileIds The identifiers of those profiles to deactivate, may be {@code null}.
250      * @return This request, never {@code null}.
251      */
252     ModelBuildingRequest setInactiveProfileIds(List<String> inactiveProfileIds);
253 
254     /**
255      * Gets the system properties to use for interpolation and profile activation. The system properties are collected
256      * from the runtime environment like {@link System#getProperties()} and environment variables.
257      *
258      * @return The system properties, never {@code null}.
259      */
260     Properties getSystemProperties();
261 
262     /**
263      * Sets the system properties to use for interpolation and profile activation. The system properties are collected
264      * from the runtime environment like {@link System#getProperties()} and environment variables.
265      *
266      * @param systemProperties The system properties, may be {@code null}.
267      * @return This request, never {@code null}.
268      */
269     ModelBuildingRequest setSystemProperties(Properties systemProperties);
270 
271     /**
272      * Gets the user properties to use for interpolation and profile activation. The user properties have been
273      * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
274      * line.
275      *
276      * @return The user properties, never {@code null}.
277      */
278     Properties getUserProperties();
279 
280     /**
281      * Sets the user properties to use for interpolation and profile activation. The user properties have been
282      * configured directly by the user on his discretion, e.g. via the {@code -Dkey=value} parameter on the command
283      * line.
284      *
285      * @param userProperties The user properties, may be {@code null}.
286      * @return This request, never {@code null}.
287      */
288     ModelBuildingRequest setUserProperties(Properties userProperties);
289 
290     /**
291      * Gets the start time of the build.
292      *
293      * @return The start time of the build or {@code null} if unknown.
294      */
295     Date getBuildStartTime();
296 
297     /**
298      * Sets the start time of the build.
299      *
300      * @param buildStartTime The start time of the build, may be {@code null}.
301      * @return This request, never {@code null}.
302      */
303     ModelBuildingRequest setBuildStartTime(Date buildStartTime);
304 
305     /**
306      * Gets the model resolver to use for resolution of mixins or parents that are not locally reachable from the
307      * project directory.
308      *
309      * @return The model resolver or {@code null} if not set.
310      */
311     ModelResolver getModelResolver();
312 
313     /**
314      * Sets the model resolver to use for resolution of mixins or parents that are not locally reachable from the
315      * project directory.
316      *
317      * @param modelResolver The model resolver to use, never {@code null}.
318      * @return This request, never {@code null}.
319      */
320     ModelBuildingRequest setModelResolver(ModelResolver modelResolver);
321 
322     /**
323      * Gets the model building listener to notify during the build process.
324      *
325      * @return The model building listener to notify or {@code null} if none.
326      */
327     ModelBuildingListener getModelBuildingListener();
328 
329     /**
330      * Sets the model building listener to notify during the build process.
331      *
332      * @param modelBuildingListener The model building listener to notify, may be {@code null}.
333      * @return This request, never {@code null}.
334      */
335     ModelBuildingRequest setModelBuildingListener(ModelBuildingListener modelBuildingListener);
336 
337     /**
338      * Gets the model cache to use for reuse of previously built models.
339      *
340      * @return The model cache or {@code null} if not set.
341      */
342     ModelCache getModelCache();
343 
344     /**
345      * Sets the model cache to use for reuse of previously built models. This is an optional component that serves
346      * performance optimizations.
347      *
348      * @param modelCache The model cache to use, may be {@code null}.
349      * @return This request, never {@code null}.
350      */
351     ModelBuildingRequest setModelCache(ModelCache modelCache);
352 
353     WorkspaceModelResolver getWorkspaceModelResolver();
354 
355     ModelBuildingRequest setWorkspaceModelResolver(WorkspaceModelResolver workspaceResolver);
356 
357     TransformerContextBuilder getTransformerContextBuilder();
358 
359     ModelBuildingRequest setTransformerContextBuilder(TransformerContextBuilder contextBuilder);
360 
361     Path getRootDirectory();
362 
363     ModelBuildingRequest setRootDirectory(Path rootDirectory);
364 }