You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/07/14 12:44:45 UTC
svn commit: r793844 - in /maven/components/trunk/maven-core/src:
main/java/org/apache/maven/project/ test/java/org/apache/maven/project/
test/resources/org/apache/maven/project/
Author: bentmann
Date: Tue Jul 14 10:44:44 2009
New Revision: 793844
URL: http://svn.apache.org/viewvc?rev=793844&view=rev
Log:
o Introduced project realm to host build extensions
Added:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java (with props)
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java (with props)
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java (with props)
maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java (with props)
Modified:
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
maven/components/trunk/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java?rev=793844&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java Tue Jul 14 10:44:44 2009
@@ -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 );
+ }
+ }
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java?rev=793844&r1=793843&r2=793844&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java Tue Jul 14 10:44:44 2009
@@ -17,6 +17,7 @@
import java.io.File;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.apache.maven.artifact.Artifact;
@@ -61,6 +62,9 @@
private ModelBuilder modelBuilder;
@Requirement
+ private ProjectBuildingHelper projectBuildingHelper;
+
+ @Requirement
private LifecycleExecutor lifecycle;
@Requirement
@@ -86,81 +90,98 @@
{
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 );
+ throw new ProjectBuildingException( "[unknown]", "Failed to build project for " + pomFile, pomFile, e );
}
- }
- 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() )
+ if ( localProject && !result.getProblems().isEmpty() && logger.isWarnEnabled() )
{
- logger.warn( problem.getMessage() );
+ 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( "" );
}
- 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();
- Model model = result.getEffectiveModel();
+ File parentPomFile = result.getRawModel( result.getModelIds().get( 1 ) ).getPomFile();
+ MavenProject project = fromModelToMavenProject( model, parentPomFile, configuration, model.getPomFile() );
- File parentPomFile = result.getRawModel( result.getModelIds().get( 1 ) ).getPomFile();
- MavenProject project = fromModelToMavenProject( model, parentPomFile, configuration, model.getPomFile() );
+ project.setOriginalModel( result.getRawModel() );
- project.setOriginalModel( result.getRawModel() );
-
- try
- {
- if ( configuration.isProcessPlugins() )
+ project.setRemoteArtifactRepositories( listener.getRemoteRepositories() );
+ project.setPluginArtifactRepositories( listener.getPluginRepositories() );
+
+ try
{
- lifecycle.populateDefaultConfigurationForPlugins( model.getBuild().getPlugins(), configuration.getLocalRepository(), project.getPluginArtifactRepositories() );
+ if ( configuration.isProcessPlugins() )
+ {
+ lifecycle.populateDefaultConfigurationForPlugins( model.getBuild().getPlugins(),
+ configuration.getLocalRepository(),
+ project.getPluginArtifactRepositories() );
+ }
+ }
+ catch ( LifecycleExecutionException e )
+ {
+ throw new ProjectBuildingException( project.getId(), e.getMessage(), e );
}
- }
- catch ( LifecycleExecutionException e )
- {
- throw new ProjectBuildingException( "", 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 );
+ 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 );
- 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 ) ) );
+ }
- project.setInjectedProfileIds( "external", getProfileIds( result.getActiveExternalProfiles() ) );
- for ( String modelId : result.getModelIds() )
+ return project;
+ }
+ finally
{
- project.setInjectedProfileIds( modelId, getProfileIds( result.getActivePomProfiles( modelId ) ) );
+ Thread.currentThread().setContextClassLoader( oldContextClassLoader );
}
-
- return project;
}
private List<String> getProfileIds( List<Profile> profiles )
@@ -182,6 +203,7 @@
configuration.getRemoteRepositories() );
ModelBuildingRequest request = new DefaultModelBuildingRequest();
+
request.setValidationLevel( configuration.getValidationLevel() );
request.setProcessPlugins( configuration.isProcessPlugins() );
request.setProfiles( configuration.getProfiles() );
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java?rev=793844&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java Tue Jul 14 10:44:44 2009
@@ -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 );
+ }
+ }
+ }
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java?rev=793844&r1=793843&r2=793844&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/MavenProject.java Tue Jul 14 10:44:44 2009
@@ -239,13 +239,6 @@
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 @@
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.
Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java?rev=793844&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java (added)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java Tue Jul 14 10:44:44 2009
@@ -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;
+
+}
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java?rev=793844&view=auto
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java (added)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java Tue Jul 14 10:44:44 2009
@@ -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;
+ }
+
+}
Propchange: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/components/trunk/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml?rev=793844&r1=793843&r2=793844&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml (original)
+++ maven/components/trunk/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml Tue Jul 14 10:44:44 2009
@@ -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>