diff options
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java')
-rw-r--r-- | framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java | 324 |
1 files changed, 324 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java new file mode 100644 index 00000000..fff2de10 --- /dev/null +++ b/framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java @@ -0,0 +1,324 @@ +package org.apache.maven.project; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.InvalidRepositoryException; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactNotFoundException; +import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.model.Repository; +import org.apache.maven.model.building.ModelBuildingException; +import org.apache.maven.model.building.ModelBuildingRequest; +import org.apache.maven.model.building.ModelSource; +import org.apache.maven.model.building.UrlModelSource; +import org.apache.maven.plugin.LegacySupport; +import org.apache.maven.profiles.ProfileManager; +import org.apache.maven.properties.internal.EnvironmentUtils; +import org.apache.maven.repository.RepositorySystem; +import org.apache.maven.wagon.events.TransferListener; +import org.codehaus.plexus.component.annotations.Component; +import org.codehaus.plexus.component.annotations.Requirement; + +/** + */ +@Component( role = MavenProjectBuilder.class ) +@Deprecated +public class DefaultMavenProjectBuilder + implements MavenProjectBuilder +{ + + @Requirement + private ProjectBuilder projectBuilder; + + @Requirement + private RepositorySystem repositorySystem; + + @Requirement + private LegacySupport legacySupport; + + // ---------------------------------------------------------------------- + // MavenProjectBuilder Implementation + // ---------------------------------------------------------------------- + + private ProjectBuildingRequest toRequest( ProjectBuilderConfiguration configuration ) + { + DefaultProjectBuildingRequest request = new DefaultProjectBuildingRequest(); + + request.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 ); + request.setResolveDependencies( false ); + + request.setLocalRepository( configuration.getLocalRepository() ); + request.setBuildStartTime( configuration.getBuildStartTime() ); + request.setUserProperties( configuration.getUserProperties() ); + request.setSystemProperties( configuration.getExecutionProperties() ); + + ProfileManager profileManager = configuration.getGlobalProfileManager(); + if ( profileManager != null ) + { + request.setActiveProfileIds( profileManager.getExplicitlyActivatedIds() ); + request.setInactiveProfileIds( profileManager.getExplicitlyDeactivatedIds() ); + } + else + { + /* + * MNG-4900: Hack to workaround deficiency of legacy API which makes it impossible for plugins to access the + * global profile manager which is required to build a POM like a CLI invocation does. Failure to consider + * the activated profiles can cause repo declarations to be lost which in turn will result in artifact + * resolution failures, in particular when using the enhanced local repo which guards access to local files + * based on the configured remote repos. + */ + MavenSession session = legacySupport.getSession(); + if ( session != null ) + { + MavenExecutionRequest req = session.getRequest(); + if ( req != null ) + { + request.setActiveProfileIds( req.getActiveProfiles() ); + request.setInactiveProfileIds( req.getInactiveProfiles() ); + } + } + } + + return request; + } + + private ProjectBuildingRequest injectSession( ProjectBuildingRequest request ) + { + MavenSession session = legacySupport.getSession(); + if ( session != null ) + { + request.setRepositorySession( session.getRepositorySession() ); + request.setSystemProperties( session.getSystemProperties() ); + if ( request.getUserProperties().isEmpty() ) + { + request.setUserProperties( session.getUserProperties() ); + } + + MavenExecutionRequest req = session.getRequest(); + if ( req != null ) + { + request.setRemoteRepositories( req.getRemoteRepositories() ); + } + } + else + { + Properties props = new Properties(); + EnvironmentUtils.addEnvVars( props ); + props.putAll( System.getProperties() ); + request.setSystemProperties( props ); + } + + return request; + } + + @SuppressWarnings( "unchecked" ) + private List<ArtifactRepository> normalizeToArtifactRepositories( List<?> repositories, + ProjectBuildingRequest request ) + throws ProjectBuildingException + { + /* + * This provides backward-compat with 2.x that allowed plugins like the maven-remote-resources-plugin:1.0 to + * populate the builder configuration with model repositories instead of artifact repositories. + */ + + if ( repositories != null ) + { + boolean normalized = false; + + List<ArtifactRepository> repos = new ArrayList<ArtifactRepository>( repositories.size() ); + + for ( Object repository : repositories ) + { + if ( repository instanceof Repository ) + { + try + { + ArtifactRepository repo = repositorySystem.buildArtifactRepository( (Repository) repository ); + repositorySystem.injectMirror( request.getRepositorySession(), Arrays.asList( repo ) ); + repositorySystem.injectProxy( request.getRepositorySession(), Arrays.asList( repo ) ); + repositorySystem.injectAuthentication( request.getRepositorySession(), Arrays.asList( repo ) ); + repos.add( repo ); + } + catch ( InvalidRepositoryException e ) + { + throw new ProjectBuildingException( "", "Invalid remote repository " + repository, e ); + } + normalized = true; + } + else + { + repos.add( (ArtifactRepository) repository ); + } + } + + if ( normalized ) + { + return repos; + } + } + + return (List<ArtifactRepository>) repositories; + } + + private ProjectBuildingException transformError( ProjectBuildingException e ) + { + if ( e.getCause() instanceof ModelBuildingException ) + { + return new InvalidProjectModelException( e.getProjectId(), e.getMessage(), e.getPomFile() ); + } + + return e; + } + + public MavenProject build( File pom, ProjectBuilderConfiguration configuration ) + throws ProjectBuildingException + { + ProjectBuildingRequest request = injectSession( toRequest( configuration ) ); + + try + { + return projectBuilder.build( pom, request ).getProject(); + } + catch ( ProjectBuildingException e ) + { + throw transformError( e ); + } + } + + // This is used by the SITE plugin. + public MavenProject build( File pom, ArtifactRepository localRepository, ProfileManager profileManager ) + throws ProjectBuildingException + { + ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration(); + configuration.setLocalRepository( localRepository ); + configuration.setGlobalProfileManager( profileManager ); + + return build( pom, configuration ); + } + + public MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories, + ProjectBuilderConfiguration configuration, boolean allowStubModel ) + throws ProjectBuildingException + { + ProjectBuildingRequest request = injectSession( toRequest( configuration ) ); + request.setRemoteRepositories( normalizeToArtifactRepositories( remoteRepositories, request ) ); + request.setProcessPlugins( false ); + request.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL ); + + try + { + return projectBuilder.build( artifact, allowStubModel, request ).getProject(); + } + catch ( ProjectBuildingException e ) + { + throw transformError( e ); + } + } + + public MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories, + ArtifactRepository localRepository, boolean allowStubModel ) + throws ProjectBuildingException + { + ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration(); + configuration.setLocalRepository( localRepository ); + + return buildFromRepository( artifact, remoteRepositories, configuration, allowStubModel ); + } + + public MavenProject buildFromRepository( Artifact artifact, List<ArtifactRepository> remoteRepositories, + ArtifactRepository localRepository ) + throws ProjectBuildingException + { + return buildFromRepository( artifact, remoteRepositories, localRepository, true ); + } + + /** + * This is used for pom-less execution like running archetype:generate. I am taking out the profile handling and the + * interpolation of the base directory until we spec this out properly. + */ + public MavenProject buildStandaloneSuperProject( ProjectBuilderConfiguration configuration ) + throws ProjectBuildingException + { + ProjectBuildingRequest request = injectSession( toRequest( configuration ) ); + request.setProcessPlugins( false ); + request.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL ); + + ModelSource modelSource = new UrlModelSource( getClass().getResource( "standalone.xml" ) ); + + MavenProject project = projectBuilder.build( modelSource, request ).getProject(); + project.setExecutionRoot( true ); + return project; + } + + public MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository ) + throws ProjectBuildingException + { + return buildStandaloneSuperProject( localRepository, null ); + } + + public MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository, ProfileManager profileManager ) + throws ProjectBuildingException + { + ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration(); + configuration.setLocalRepository( localRepository ); + configuration.setGlobalProfileManager( profileManager ); + + return buildStandaloneSuperProject( configuration ); + } + + public MavenProject buildWithDependencies( File pom, ArtifactRepository localRepository, + ProfileManager profileManager, TransferListener transferListener ) + throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException + { + ProjectBuilderConfiguration configuration = new DefaultProjectBuilderConfiguration(); + configuration.setLocalRepository( localRepository ); + configuration.setGlobalProfileManager( profileManager ); + + ProjectBuildingRequest request = injectSession( toRequest( configuration ) ); + + request.setResolveDependencies( true ); + + try + { + return projectBuilder.build( pom, request ).getProject(); + } + catch ( ProjectBuildingException e ) + { + throw transformError( e ); + } + } + + public MavenProject buildWithDependencies( File pom, ArtifactRepository localRepository, + ProfileManager profileManager ) + throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException + { + return buildWithDependencies( pom, localRepository, profileManager, null ); + } + +} |