mirror of https://github.com/apache/maven.git
o Introduced project realm to host build extensions
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@793844 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
faa082995e
commit
2caa6b5112
|
@ -0,0 +1,109 @@
|
|||
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.util.List;
|
||||
|
||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.building.AbstractModelBuildingListener;
|
||||
import org.apache.maven.model.building.ModelBuildingEvent;
|
||||
import org.codehaus.plexus.classworlds.realm.ClassRealm;
|
||||
|
||||
/**
|
||||
* Processes events from the model builder.
|
||||
*
|
||||
* @author Benjamin Bentmann
|
||||
*/
|
||||
class DefaultModelBuildingListener
|
||||
extends AbstractModelBuildingListener
|
||||
{
|
||||
|
||||
private ProjectBuildingHelper projectBuildingHelper;
|
||||
|
||||
private ProjectBuildingRequest projectBuildingRequest;
|
||||
|
||||
private ClassRealm projectRealm;
|
||||
|
||||
private List<ArtifactRepository> remoteRepositories;
|
||||
|
||||
private List<ArtifactRepository> pluginRepositories;
|
||||
|
||||
public DefaultModelBuildingListener( ProjectBuildingHelper projectBuildingHelper,
|
||||
ProjectBuildingRequest projectBuildingRequest )
|
||||
{
|
||||
if ( projectBuildingHelper == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "project realm manager missing" );
|
||||
}
|
||||
this.projectBuildingHelper = projectBuildingHelper;
|
||||
|
||||
if ( projectBuildingRequest == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "project building request missing" );
|
||||
}
|
||||
this.projectBuildingRequest = projectBuildingRequest;
|
||||
}
|
||||
|
||||
public ClassRealm getProjectRealm()
|
||||
{
|
||||
return projectRealm;
|
||||
}
|
||||
|
||||
public List<ArtifactRepository> getRemoteRepositories()
|
||||
{
|
||||
return remoteRepositories;
|
||||
}
|
||||
|
||||
public List<ArtifactRepository> getPluginRepositories()
|
||||
{
|
||||
return pluginRepositories;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buildExtensionsAssembled( ModelBuildingEvent event )
|
||||
throws Exception
|
||||
{
|
||||
Model model = event.getModel();
|
||||
|
||||
remoteRepositories = projectBuildingRequest.getRemoteRepositories();
|
||||
remoteRepositories =
|
||||
projectBuildingHelper.createArtifactRepositories( model.getRepositories(), remoteRepositories );
|
||||
|
||||
pluginRepositories = projectBuildingRequest.getPluginArtifactRepositories();
|
||||
pluginRepositories =
|
||||
projectBuildingHelper.createArtifactRepositories( model.getPluginRepositories(), pluginRepositories );
|
||||
|
||||
if ( event.getRequest().isProcessPlugins() )
|
||||
{
|
||||
projectRealm =
|
||||
projectBuildingHelper.createProjectRealm( model, projectBuildingRequest.getLocalRepository(),
|
||||
pluginRepositories );
|
||||
|
||||
/*
|
||||
* Update the context class loader so that the container will search the project realm when the model
|
||||
* builder injects the lifecycle bindings from the packaging next. The class loader is reset by the project
|
||||
* builder when the project is fully assembled.
|
||||
*/
|
||||
Thread.currentThread().setContextClassLoader( projectRealm );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -17,6 +17,7 @@ package org.apache.maven.project;
|
|||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
|
@ -60,6 +61,9 @@ public class DefaultProjectBuilder
|
|||
@Requirement
|
||||
private ModelBuilder modelBuilder;
|
||||
|
||||
@Requirement
|
||||
private ProjectBuildingHelper projectBuildingHelper;
|
||||
|
||||
@Requirement
|
||||
private LifecycleExecutor lifecycle;
|
||||
|
||||
|
@ -86,81 +90,98 @@ public class DefaultProjectBuilder
|
|||
{
|
||||
ModelBuildingRequest request = getModelBuildingRequest( configuration );
|
||||
|
||||
ModelBuildingResult result;
|
||||
DefaultModelBuildingListener listener = new DefaultModelBuildingListener( projectBuildingHelper, configuration );
|
||||
request.setModelBuildingListeners( Arrays.asList( listener ) );
|
||||
|
||||
ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
|
||||
|
||||
try
|
||||
{
|
||||
if ( localProject )
|
||||
ModelBuildingResult result;
|
||||
try
|
||||
{
|
||||
result = modelBuilder.build( pomFile, request );
|
||||
if ( localProject )
|
||||
{
|
||||
result = modelBuilder.build( pomFile, request );
|
||||
}
|
||||
else
|
||||
{
|
||||
result = modelBuilder.build( new FileModelSource( pomFile ), request );
|
||||
}
|
||||
}
|
||||
else
|
||||
catch ( ModelBuildingException e )
|
||||
{
|
||||
result = modelBuilder.build( new FileModelSource( pomFile ), request );
|
||||
}
|
||||
}
|
||||
catch ( ModelBuildingException e )
|
||||
{
|
||||
throw new ProjectBuildingException( "[unknown]", "Failed to build project for " + pomFile, pomFile, e );
|
||||
}
|
||||
|
||||
if ( localProject && !result.getProblems().isEmpty() && logger.isWarnEnabled() )
|
||||
{
|
||||
logger.warn( "" );
|
||||
logger.warn( "One or more problems were encountered while building the effective model:" );
|
||||
|
||||
for ( ModelProblem problem : result.getProblems() )
|
||||
{
|
||||
logger.warn( problem.getMessage() );
|
||||
throw new ProjectBuildingException( "[unknown]", "Failed to build project for " + pomFile, pomFile, e );
|
||||
}
|
||||
|
||||
logger.warn( "" );
|
||||
logger.warn( "It is highly recommended to fix these problems"
|
||||
+ " because they threaten the stability of your build." );
|
||||
logger.warn( "" );
|
||||
logger.warn( "For this reason, future Maven versions will no"
|
||||
+ " longer support building such malformed projects." );
|
||||
logger.warn( "" );
|
||||
}
|
||||
|
||||
Model model = result.getEffectiveModel();
|
||||
|
||||
File parentPomFile = result.getRawModel( result.getModelIds().get( 1 ) ).getPomFile();
|
||||
MavenProject project = fromModelToMavenProject( model, parentPomFile, configuration, model.getPomFile() );
|
||||
|
||||
project.setOriginalModel( result.getRawModel() );
|
||||
|
||||
try
|
||||
{
|
||||
if ( configuration.isProcessPlugins() )
|
||||
if ( localProject && !result.getProblems().isEmpty() && logger.isWarnEnabled() )
|
||||
{
|
||||
lifecycle.populateDefaultConfigurationForPlugins( model.getBuild().getPlugins(), configuration.getLocalRepository(), project.getPluginArtifactRepositories() );
|
||||
logger.warn( "" );
|
||||
logger.warn( "One or more problems were encountered while building the project's effective model:" );
|
||||
|
||||
for ( ModelProblem problem : result.getProblems() )
|
||||
{
|
||||
logger.warn( problem.getMessage() );
|
||||
}
|
||||
|
||||
logger.warn( "" );
|
||||
logger.warn( "It is highly recommended to fix these problems"
|
||||
+ " because they threaten the stability of your build." );
|
||||
logger.warn( "" );
|
||||
logger.warn( "For this reason, future Maven versions will no"
|
||||
+ " longer support building such malformed projects." );
|
||||
logger.warn( "" );
|
||||
}
|
||||
|
||||
Model model = result.getEffectiveModel();
|
||||
|
||||
File parentPomFile = result.getRawModel( result.getModelIds().get( 1 ) ).getPomFile();
|
||||
MavenProject project = fromModelToMavenProject( model, parentPomFile, configuration, model.getPomFile() );
|
||||
|
||||
project.setOriginalModel( result.getRawModel() );
|
||||
|
||||
project.setRemoteArtifactRepositories( listener.getRemoteRepositories() );
|
||||
project.setPluginArtifactRepositories( listener.getPluginRepositories() );
|
||||
|
||||
try
|
||||
{
|
||||
if ( configuration.isProcessPlugins() )
|
||||
{
|
||||
lifecycle.populateDefaultConfigurationForPlugins( model.getBuild().getPlugins(),
|
||||
configuration.getLocalRepository(),
|
||||
project.getPluginArtifactRepositories() );
|
||||
}
|
||||
}
|
||||
catch ( LifecycleExecutionException e )
|
||||
{
|
||||
throw new ProjectBuildingException( project.getId(), e.getMessage(), e );
|
||||
}
|
||||
|
||||
Build build = project.getBuild();
|
||||
// NOTE: setting this script-source root before path translation, because
|
||||
// the plugin tools compose basedir and scriptSourceRoot into a single file.
|
||||
project.addScriptSourceRoot( build.getScriptSourceDirectory() );
|
||||
project.addCompileSourceRoot( build.getSourceDirectory() );
|
||||
project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
|
||||
project.setFile( pomFile );
|
||||
|
||||
List<Profile> activeProfiles = new ArrayList<Profile>();
|
||||
activeProfiles.addAll( result.getActivePomProfiles( result.getModelIds().get( 0 ) ) );
|
||||
activeProfiles.addAll( result.getActiveExternalProfiles() );
|
||||
project.setActiveProfiles( activeProfiles );
|
||||
|
||||
project.setInjectedProfileIds( "external", getProfileIds( result.getActiveExternalProfiles() ) );
|
||||
for ( String modelId : result.getModelIds() )
|
||||
{
|
||||
project.setInjectedProfileIds( modelId, getProfileIds( result.getActivePomProfiles( modelId ) ) );
|
||||
}
|
||||
|
||||
return project;
|
||||
}
|
||||
catch ( LifecycleExecutionException e )
|
||||
finally
|
||||
{
|
||||
throw new ProjectBuildingException( "", e.getMessage(), e );
|
||||
Thread.currentThread().setContextClassLoader( oldContextClassLoader );
|
||||
}
|
||||
|
||||
Build build = project.getBuild();
|
||||
// NOTE: setting this script-source root before path translation, because
|
||||
// the plugin tools compose basedir and scriptSourceRoot into a single file.
|
||||
project.addScriptSourceRoot( build.getScriptSourceDirectory() );
|
||||
project.addCompileSourceRoot( build.getSourceDirectory() );
|
||||
project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
|
||||
project.setFile( pomFile );
|
||||
|
||||
List<Profile> activeProfiles = new ArrayList<Profile>();
|
||||
activeProfiles.addAll( result.getActivePomProfiles( result.getModelIds().get( 0 ) ) );
|
||||
activeProfiles.addAll( result.getActiveExternalProfiles() );
|
||||
project.setActiveProfiles( activeProfiles );
|
||||
|
||||
project.setInjectedProfileIds( "external", getProfileIds( result.getActiveExternalProfiles() ) );
|
||||
for ( String modelId : result.getModelIds() )
|
||||
{
|
||||
project.setInjectedProfileIds( modelId, getProfileIds( result.getActivePomProfiles( modelId ) ) );
|
||||
}
|
||||
|
||||
return project;
|
||||
}
|
||||
|
||||
private List<String> getProfileIds( List<Profile> profiles )
|
||||
|
@ -182,6 +203,7 @@ public class DefaultProjectBuilder
|
|||
configuration.getRemoteRepositories() );
|
||||
|
||||
ModelBuildingRequest request = new DefaultModelBuildingRequest();
|
||||
|
||||
request.setValidationLevel( configuration.getValidationLevel() );
|
||||
request.setProcessPlugins( configuration.isProcessPlugins() );
|
||||
request.setProfiles( configuration.getProfiles() );
|
||||
|
|
|
@ -0,0 +1,214 @@
|
|||
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.net.MalformedURLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.maven.ArtifactFilterManager;
|
||||
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.ArtifactResolutionException;
|
||||
import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
|
||||
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
|
||||
import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
|
||||
import org.apache.maven.model.Build;
|
||||
import org.apache.maven.model.Extension;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Plugin;
|
||||
import org.apache.maven.model.Repository;
|
||||
import org.apache.maven.repository.RepositorySystem;
|
||||
import org.codehaus.plexus.MutablePlexusContainer;
|
||||
import org.codehaus.plexus.PlexusContainer;
|
||||
import org.codehaus.plexus.classworlds.ClassWorld;
|
||||
import org.codehaus.plexus.classworlds.realm.ClassRealm;
|
||||
import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
|
||||
import org.codehaus.plexus.component.annotations.Component;
|
||||
import org.codehaus.plexus.component.annotations.Requirement;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
|
||||
/**
|
||||
* Assists the project builder.
|
||||
*
|
||||
* @author Benjamin Bentmann
|
||||
*/
|
||||
@Component( role = ProjectBuildingHelper.class )
|
||||
public class DefaultProjectBuildingHelper
|
||||
implements ProjectBuildingHelper
|
||||
{
|
||||
|
||||
@Requirement
|
||||
private Logger logger;
|
||||
|
||||
@Requirement
|
||||
private PlexusContainer container;
|
||||
|
||||
@Requirement
|
||||
private RepositorySystem repositorySystem;
|
||||
|
||||
@Requirement
|
||||
private ResolutionErrorHandler resolutionErrorHandler;
|
||||
|
||||
@Requirement
|
||||
private ArtifactFilterManager artifactFilterManager;
|
||||
|
||||
public List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
|
||||
List<ArtifactRepository> externalRepositories )
|
||||
throws InvalidRepositoryException
|
||||
{
|
||||
List<ArtifactRepository> artifactRepositories = new ArrayList<ArtifactRepository>();
|
||||
|
||||
for ( Repository repository : pomRepositories )
|
||||
{
|
||||
artifactRepositories.add( repositorySystem.buildArtifactRepository( repository ) );
|
||||
}
|
||||
|
||||
artifactRepositories = repositorySystem.getMirrors( artifactRepositories );
|
||||
|
||||
if ( externalRepositories != null )
|
||||
{
|
||||
artifactRepositories.addAll( externalRepositories );
|
||||
}
|
||||
|
||||
artifactRepositories = repositorySystem.getEffectiveRepositories( artifactRepositories );
|
||||
|
||||
return artifactRepositories;
|
||||
}
|
||||
|
||||
public ClassRealm createProjectRealm( Model model, ArtifactRepository localRepository,
|
||||
List<ArtifactRepository> remoteRepositories )
|
||||
throws ArtifactResolutionException
|
||||
{
|
||||
Build build = model.getBuild();
|
||||
|
||||
if ( build == null )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
List<Plugin> extensionPlugins = new ArrayList<Plugin>();
|
||||
|
||||
for ( Plugin plugin : build.getPlugins() )
|
||||
{
|
||||
if ( plugin.isExtensions() )
|
||||
{
|
||||
extensionPlugins.add( plugin );
|
||||
}
|
||||
}
|
||||
|
||||
if ( build.getExtensions().isEmpty() && extensionPlugins.isEmpty() )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
String realmId = model.getGroupId() + ':' + model.getArtifactId() + ':' + model.getVersion();
|
||||
|
||||
if ( logger.isDebugEnabled() )
|
||||
{
|
||||
logger.debug( "Creating project realm " + realmId );
|
||||
}
|
||||
|
||||
ClassWorld world = ( (MutablePlexusContainer) container ).getClassWorld();
|
||||
|
||||
ClassRealm projectRealm;
|
||||
|
||||
synchronized ( world )
|
||||
{
|
||||
projectRealm = world.getClassRealm( realmId );
|
||||
|
||||
if ( projectRealm == null )
|
||||
{
|
||||
try
|
||||
{
|
||||
projectRealm = world.newRealm( realmId );
|
||||
projectRealm.setParentRealm( container.getContainerRealm() );
|
||||
}
|
||||
catch ( DuplicateRealmException e )
|
||||
{
|
||||
throw new IllegalStateException( "Failed to create project realm " + realmId, e );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ( Extension extension : build.getExtensions() )
|
||||
{
|
||||
Artifact artifact =
|
||||
repositorySystem.createArtifact( extension.getGroupId(), extension.getArtifactId(),
|
||||
extension.getVersion(), "jar" );
|
||||
|
||||
populateRealm( projectRealm, artifact, localRepository, remoteRepositories );
|
||||
}
|
||||
|
||||
for ( Plugin plugin : extensionPlugins )
|
||||
{
|
||||
Artifact artifact = repositorySystem.createPluginArtifact( plugin );
|
||||
|
||||
populateRealm( projectRealm, artifact, localRepository, remoteRepositories );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
container.discoverComponents( projectRealm );
|
||||
}
|
||||
catch ( Exception e )
|
||||
{
|
||||
throw new IllegalStateException( "Failed to discover components in project realm " + realmId, e );
|
||||
}
|
||||
|
||||
return projectRealm;
|
||||
}
|
||||
|
||||
private void populateRealm( ClassRealm realm, Artifact artifact, ArtifactRepository localRepository,
|
||||
List<ArtifactRepository> remoteRepositories )
|
||||
throws ArtifactResolutionException
|
||||
{
|
||||
ArtifactResolutionRequest request = new ArtifactResolutionRequest();
|
||||
request.setArtifact( artifact );
|
||||
request.setResolveTransitively( true );
|
||||
request.setFilter( artifactFilterManager.getCoreArtifactFilter() );
|
||||
request.setLocalRepository( localRepository );
|
||||
request.setRemoteRepostories( remoteRepositories );
|
||||
|
||||
ArtifactResolutionResult result = repositorySystem.resolve( request );
|
||||
|
||||
resolutionErrorHandler.throwErrors( request, result );
|
||||
|
||||
for ( Artifact resultArtifact : result.getArtifacts() )
|
||||
{
|
||||
if ( logger.isDebugEnabled() )
|
||||
{
|
||||
logger.debug( " " + resultArtifact.getFile() );
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
realm.addURL( resultArtifact.getFile().toURI().toURL() );
|
||||
}
|
||||
catch ( MalformedURLException e )
|
||||
{
|
||||
throw new IllegalStateException( "Failed to populate project realm " + realm.getId() + " with "
|
||||
+ artifact.getFile(), e );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -239,13 +239,6 @@ public class MavenProject
|
|||
this.projectBuilderConfiguration = projectBuilderConfiguration;
|
||||
this.repositorySystem = repositorySystem;
|
||||
originalModel = model;
|
||||
|
||||
remoteArtifactRepositories = projectBuilderConfiguration.getRemoteRepositories();
|
||||
remoteArtifactRepositories = createArtifactRepositories( model.getRepositories(), remoteArtifactRepositories );
|
||||
|
||||
pluginArtifactRepositories = projectBuilderConfiguration.getPluginArtifactRepositories();
|
||||
pluginArtifactRepositories =
|
||||
createArtifactRepositories( model.getPluginRepositories(), pluginArtifactRepositories );
|
||||
}
|
||||
|
||||
//TODO: need to integrate the effective scope and refactor it out of the MMS
|
||||
|
@ -268,35 +261,6 @@ public class MavenProject
|
|||
|
||||
return artifacts;
|
||||
}
|
||||
|
||||
private List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
|
||||
List<ArtifactRepository> externalRepositories )
|
||||
{
|
||||
List<ArtifactRepository> artifactRepositories = new ArrayList<ArtifactRepository>();
|
||||
|
||||
for ( Repository repository : pomRepositories )
|
||||
{
|
||||
try
|
||||
{
|
||||
artifactRepositories.add( repositorySystem.buildArtifactRepository( repository ) );
|
||||
}
|
||||
catch ( InvalidRepositoryException e )
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
artifactRepositories = repositorySystem.getMirrors( artifactRepositories );
|
||||
|
||||
if ( externalRepositories != null )
|
||||
{
|
||||
artifactRepositories.addAll( externalRepositories );
|
||||
}
|
||||
|
||||
artifactRepositories = repositorySystem.getEffectiveRepositories( artifactRepositories );
|
||||
|
||||
return artifactRepositories;
|
||||
}
|
||||
|
||||
// TODO: Find a way to use <relativePath/> here...it's tricky, because the moduleProject
|
||||
// usually doesn't have a file associated with it yet.
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
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.util.List;
|
||||
|
||||
import org.apache.maven.artifact.InvalidRepositoryException;
|
||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Repository;
|
||||
import org.codehaus.plexus.classworlds.realm.ClassRealm;
|
||||
|
||||
/**
|
||||
* Assists the project builder.
|
||||
*
|
||||
* @author Benjamin Bentmann
|
||||
*/
|
||||
public interface ProjectBuildingHelper
|
||||
{
|
||||
|
||||
/**
|
||||
* Creates the effective artifact repositories from the specified POM repositories.
|
||||
*
|
||||
* @param pomRepositories The POM repositories to create the artifact repositories from, must not be {@code null}.
|
||||
* @param externalRepositories The external (and already mirrored) repositories to merge into the result list, may
|
||||
* be {@code null}.
|
||||
* @return The effective artifact repositories, never {@code null}.
|
||||
* @throws InvalidRepositoryException
|
||||
*/
|
||||
List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
|
||||
List<ArtifactRepository> externalRepositories )
|
||||
throws InvalidRepositoryException;
|
||||
|
||||
/**
|
||||
* Creates the project realm that hosts the build extensions of the specified model.
|
||||
*
|
||||
* @param model The model to create the project realm for, must not be {@code null}
|
||||
* @param localRepository The local repository to use for artifact resolution, must not be {@code null}.
|
||||
* @param remoteRepositories The remote repositories to use for artifact resolution, must not be {@code null}.
|
||||
* @return The project realm or {@code null} if no build extensions are present.
|
||||
* @throws ArtifactResolutionException If any build extension could not be resolved.
|
||||
*/
|
||||
ClassRealm createProjectRealm( Model model, ArtifactRepository localRepository,
|
||||
List<ArtifactRepository> remoteRepositories )
|
||||
throws ArtifactResolutionException;
|
||||
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
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.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.maven.artifact.InvalidRepositoryException;
|
||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Repository;
|
||||
import org.codehaus.plexus.classworlds.realm.ClassRealm;
|
||||
import org.codehaus.plexus.component.annotations.Component;
|
||||
|
||||
/**
|
||||
* A stub implementation to bypass artifact resolution from repositories.
|
||||
*
|
||||
* @author Benjamin Bentmann
|
||||
*/
|
||||
@Component( role = ProjectBuildingHelper.class )
|
||||
public class EmptyProjectBuildingHelper
|
||||
implements ProjectBuildingHelper
|
||||
{
|
||||
|
||||
public List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
|
||||
List<ArtifactRepository> externalRepositories )
|
||||
throws InvalidRepositoryException
|
||||
{
|
||||
return new ArrayList<ArtifactRepository>();
|
||||
}
|
||||
|
||||
public ClassRealm createProjectRealm( Model model, ArtifactRepository localRepository,
|
||||
List<ArtifactRepository> remoteRepositories )
|
||||
throws ArtifactResolutionException
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -5,5 +5,9 @@
|
|||
<role>org.apache.maven.lifecycle.LifecycleExecutor</role>
|
||||
<implementation>org.apache.maven.project.EmptyLifecycleExecutor</implementation>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.project.ProjectBuildingHelper</role>
|
||||
<implementation>org.apache.maven.project.EmptyProjectBuildingHelper</implementation>
|
||||
</component>
|
||||
</components>
|
||||
</plexus>
|
||||
|
|
Loading…
Reference in New Issue