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