Java tutorial
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<>(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); } }