Building maven projects works; it runs all integration test projects,

and when one fails (FAIL_AT_END) the build of this project fails too.


git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@279336 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Kenney Westerhof 2005-09-07 14:59:36 +00:00
parent 69c6305347
commit fdc4461eb7

View File

@ -18,14 +18,15 @@
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
import org.apache.maven.artifact.repository.DefaultArtifactRepository;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.execution.MavenExecutionResponse;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.ReactorManager;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.lifecycle.LifecycleExecutor;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.profiles.DefaultProfileManager;
@ -34,6 +35,7 @@
import org.apache.maven.project.ProjectBuildingException;
import org.apache.maven.settings.Settings;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.util.dag.CycleDetectedException;
/**
* @goal fork
@ -45,6 +47,11 @@
public class ForkMojo
extends AbstractMojo
{
/**
* @parameter expression="${component.org.apache.maven.lifecycle.LifecycleExecutor}"
*/
private LifecycleExecutor lifecycleExecutor;
/**
* @parameter expression="${session}"
*/
@ -55,7 +62,6 @@ public class ForkMojo
*/
private Settings settings;
/**
* @parameter expression="${project}"
*/
@ -64,71 +70,103 @@ public class ForkMojo
/**
* @parameter expression="${project.basedir}/src/it/"
*/
private File projectsDir;
private ArtifactRepository artifactRepo;
private MavenProjectBuilder projectBuilder;
private File integrationTestsDirectory;
public void execute()
throws MojoExecutionException
{
initComponents();
buildProjects( listITPoms() );
try
{
buildProjects();
}
catch ( CycleDetectedException e )
{
throw new MojoExecutionException( "Error building projects", e );
}
catch ( LifecycleExecutionException e )
{
throw new MojoExecutionException( "Error building projects", e );
}
}
private void initComponents()
private void buildProjects()
throws CycleDetectedException, LifecycleExecutionException, MojoExecutionException
{
List projects = collectProjects();
ReactorManager rm = new ReactorManager( projects );
rm.setFailureBehavior( ReactorManager.FAIL_AT_END );
List goals = Collections.singletonList( "package" );
MavenSession forkedSession = new MavenSession(
session.getContainer(), session.getSettings(),
session.getLocalRepository(),
session.getEventDispatcher(),
rm, goals, integrationTestsDirectory.toString()
);
MavenExecutionResponse response = lifecycleExecutor.execute( forkedSession,
rm, forkedSession.getEventDispatcher()
);
if ( response.isExecutionFailure() )
{
throw new MojoExecutionException(
"Integration test failed" );
}
}
private List collectProjects()
throws MojoExecutionException
{
List projects = new ArrayList();
MavenProjectBuilder projectBuilder;
try
{
artifactRepo = createLocalRepository();
projectBuilder = (MavenProjectBuilder)
session.getContainer().lookup( MavenProjectBuilder.ROLE );
if ( projectBuilder == null )
throw new MojoExecutionException( "Lookup for MavenProjectBuilder returned null" );
}
catch (ComponentLookupException e)
catch ( ComponentLookupException e )
{
throw new MojoExecutionException( "Cannot get a MavenProjectBuilder", e);
}
throw new MojoExecutionException( "Cannot get a MavenProjectBuilder", e );
}
private void buildProjects( List poms )
{
getLog().info( "Building " + poms.size() + " integration test projects.." );
List poms = listITPoms();
for ( Iterator i = poms.iterator(); i.hasNext(); )
{
File pom = (File) i.next();
try
{
MavenProject p = buildProject( (File) i.next() );
MavenProject p = projectBuilder.build(
pom, session.getLocalRepository(),
new DefaultProfileManager( session.getContainer() ) );
getLog().debug( "Adding project " + p.getId() );
projects.add( p );
getLog().info("Building " + p.getId() );
}
catch (ProjectBuildingException e)
{
getLog().error("Build Error", e);
}
throw new MojoExecutionException( "Error loading " + pom, e );
}
}
private MavenProject buildProject( File pom )
throws ProjectBuildingException
{
return projectBuilder.build( pom, artifactRepo, new DefaultProfileManager(
session.getContainer() ) );
return projects;
}
private List listITPoms()
{
List poms = new ArrayList();
File [] children = projectsDir.listFiles();
File [] children = integrationTestsDirectory.listFiles();
for ( int i = 0; i < children.length; i++ )
{
@ -140,53 +178,9 @@ private List listITPoms()
{
poms.add( pomFile );
}
}
}
return poms;
}
// Duplicate code from MavenCli, slightly modified.
private ArtifactRepository createLocalRepository()
throws ComponentLookupException
{
ArtifactRepositoryLayout repositoryLayout = (ArtifactRepositoryLayout)
session.getContainer().lookup( ArtifactRepositoryLayout.ROLE, "default" );
ArtifactRepositoryFactory artifactRepositoryFactory = (ArtifactRepositoryFactory)
session.getContainer().lookup(
ArtifactRepositoryFactory.ROLE );
String url = "file://" + settings.getLocalRepository();
ArtifactRepository localRepository = new DefaultArtifactRepository( "local", url, repositoryLayout );
boolean snapshotPolicySet = false;
if ( settings.isOffline() )
{
artifactRepositoryFactory.setGlobalEnable( false );
snapshotPolicySet = true;
}
/* can't do this here.. :(
if ( !snapshotPolicySet && commandLine.hasOption( CLIManager.UPDATE_SNAPSHOTS ) )
{
artifactRepositoryFactory.setGlobalUpdatePolicy( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS );
}
if ( commandLine.hasOption( CLIManager.CHECKSUM_FAILURE_POLICY ) )
{
artifactRepositoryFactory.setGlobalChecksumPolicy( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
}
else if ( commandLine.hasOption( CLIManager.CHECKSUM_WARNING_POLICY ) )
{
artifactRepositoryFactory.setGlobalChecksumPolicy( ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
}
*/
return localRepository;
}
}