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