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 }