1 package org.apache.maven.project; 2 3 /* 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import org.apache.maven.artifact.Artifact; 23 import org.apache.maven.artifact.repository.ArtifactRepository; 24 import org.apache.maven.artifact.resolver.ArtifactNotFoundException; 25 import org.apache.maven.artifact.resolver.ArtifactResolutionException; 26 import org.apache.maven.profiles.ProfileManager; 27 import org.apache.maven.project.interpolation.ModelInterpolationException; 28 import org.apache.maven.wagon.events.TransferListener; 29 30 import java.io.File; 31 import java.util.List; 32 33 public interface MavenProjectBuilder 34 { 35 String ROLE = MavenProjectBuilder.class.getName(); 36 37 String STANDALONE_SUPERPOM_GROUPID = "org.apache.maven"; 38 39 String STANDALONE_SUPERPOM_ARTIFACTID = "super-pom"; 40 41 String STANDALONE_SUPERPOM_VERSION = "2.0"; 42 43 MavenProject build( File project, ArtifactRepository localRepository, ProfileManager globalProfileManager ) 44 throws ProjectBuildingException; 45 46 MavenProject build( File project, ArtifactRepository localRepository, ProfileManager globalProfileManager, 47 boolean checkDistributionManagementStatus ) 48 throws ProjectBuildingException; 49 50 // ---------------------------------------------------------------------- 51 // These methods are used by the MavenEmbedder 52 // ---------------------------------------------------------------------- 53 54 MavenProject buildWithDependencies( File project, ArtifactRepository localRepository, 55 ProfileManager globalProfileManager, TransferListener transferListener ) 56 throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException; 57 58 MavenProject buildWithDependencies( File project, ArtifactRepository localRepository, 59 ProfileManager globalProfileManager ) 60 throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException; 61 62 // ---------------------------------------------------------------------- 63 // 64 // ---------------------------------------------------------------------- 65 66 /** 67 * Build the artifact from the local repository, resolving it if necessary. 68 * 69 * @param artifact the artifact description 70 * @param localRepository the local repository 71 * @param remoteArtifactRepositories the remote repository list 72 * @return the built project 73 * @throws ProjectBuildingException 74 */ 75 MavenProject buildFromRepository( Artifact artifact, List remoteArtifactRepositories, 76 ArtifactRepository localRepository ) 77 throws ProjectBuildingException; 78 79 /** 80 * Build the artifact from the local repository, resolving it if necessary. 81 * 82 * @param artifact the artifact description 83 * @param localRepository the local repository 84 * @param remoteArtifactRepositories the remote repository list 85 * @param allowStubModel return a stub if the POM is not found 86 * @return the built project 87 * @throws ProjectBuildingException 88 */ 89 MavenProject buildFromRepository( Artifact artifact, List remoteArtifactRepositories, 90 ArtifactRepository localRepository, boolean allowStubModel ) 91 throws ProjectBuildingException; 92 93 /** 94 * @deprecated Use {@link MavenProjectBuilder#buildStandaloneSuperProject(ProjectBuilderConfiguration)} instead. 95 */ 96 MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository ) 97 throws ProjectBuildingException; 98 99 /** 100 * need to pass a profilemanager with correct context (eg. with execution properties) 101 * @deprecated Use {@link MavenProjectBuilder#buildStandaloneSuperProject(ProjectBuilderConfiguration)} instead. 102 */ 103 MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository, ProfileManager profileManager ) 104 throws ProjectBuildingException; 105 106 MavenProject buildStandaloneSuperProject( ProjectBuilderConfiguration config ) 107 throws ProjectBuildingException; 108 109 MavenProject build( File pom, 110 ProjectBuilderConfiguration config ) 111 throws ProjectBuildingException; 112 113 MavenProject build( File pom, 114 ProjectBuilderConfiguration config, 115 boolean checkDistributionManagementStatus ) 116 throws ProjectBuildingException; 117 118 // ---------------------------------------------------------------------------- 119 // API BELOW IS USED TO PRESERVE DYNAMISM IN THE BUILD SECTION OF THE POM. 120 // ---------------------------------------------------------------------------- 121 122 /** 123 * Variant of {@link MavenProjectBuilder#calculateConcreteState(MavenProject, ProjectBuilderConfiguration, boolean)} 124 * which assumes that project references should be processed. This is provided for performance reasons, for cases 125 * where you know all projects in the reactor will be processed, making traversal of project references unnecessary. 126 */ 127 void calculateConcreteState( MavenProject project, ProjectBuilderConfiguration config ) 128 throws ModelInterpolationException; 129 130 /** 131 * Up to this point, the build section of the POM remains uninterpolated except for the artifact coordinates 132 * it contains. This method will interpolate the build section and associated project-instance data 133 * structures. Along with the {@link MavenProjectBuilder#restoreDynamicState(MavenProject, ProjectBuilderConfiguration, boolean)} 134 * method, this method allows expressions in these areas of the POM and project instance to 135 * be reevaluated in the event that a mojo changes one the build-path values, or a project property. 136 * <br/><br/> 137 * This method will process the following: 138 * <ol> 139 * <li>the specified project's parent project (if not null)</li> 140 * <li>specified project</li> 141 * <li>its execution project (if not null)</li> 142 * <li>any project references (iff processReferences == true)</li> 143 * </ol> 144 */ 145 void calculateConcreteState( MavenProject project, ProjectBuilderConfiguration config, boolean processReferences ) 146 throws ModelInterpolationException; 147 148 // /** 149 // * Variant of {@link MavenProjectBuilder#restoreDynamicState(MavenProject, ProjectBuilderConfiguration, boolean)} 150 // * which assumes that project references should be processed. This is provided for performance reasons, for cases 151 // * where you know all projects in the reactor will be processed, making traversal of project references unnecessary. 152 // */ 153 // void restoreDynamicState( MavenProject project, ProjectBuilderConfiguration config ) 154 // throws ModelInterpolationException; 155 // 156 // /** 157 // * In the event that a mojo execution has changed one or more build paths, or changed the project properties, 158 // * this method can restore the build section of the POM to its uninterpolated form, to allow reevaluation of 159 // * any expressions that may depend on this changed information. This method will short-circuit if the project 160 // * is not in a concrete state (see {@link MavenProjectBuilder#calculateConcreteState(MavenProject, ProjectBuilderConfiguration, boolean)} 161 // * or if the properties and build paths of the project remain unchanged. 162 // * <br/><br/> 163 // * This method will process the following: 164 // * <ol> 165 // * <li>the specified project's parent project (if not null)</li> 166 // * <li>specified project</li> 167 // * <li>its execution project (if not null)</li> 168 // * <li>any project references (iff processReferences == true)</li> 169 // * </ol> 170 // */ 171 // void restoreDynamicState( MavenProject project, ProjectBuilderConfiguration config, boolean processReferences ) 172 // throws ModelInterpolationException; 173 }