You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by ke...@apache.org on 2005/09/07 17:00:41 UTC

svn commit: r279336 - /maven/components/trunk/sandbox/maven-it-plugin/src/main/java/org/apache/maven/plugin/it/ForkMojo.java

Author: kenney
Date: Wed Sep  7 07:59:36 2005
New Revision: 279336

URL: http://svn.apache.org/viewcvs?rev=279336&view=rev
Log:
Building maven projects works; it runs all integration test projects,
and when one fails (FAIL_AT_END) the build of this project fails too.

Modified:
    maven/components/trunk/sandbox/maven-it-plugin/src/main/java/org/apache/maven/plugin/it/ForkMojo.java

Modified: maven/components/trunk/sandbox/maven-it-plugin/src/main/java/org/apache/maven/plugin/it/ForkMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/sandbox/maven-it-plugin/src/main/java/org/apache/maven/plugin/it/ForkMojo.java?rev=279336&r1=279335&r2=279336&view=diff
==============================================================================
--- maven/components/trunk/sandbox/maven-it-plugin/src/main/java/org/apache/maven/plugin/it/ForkMojo.java (original)
+++ maven/components/trunk/sandbox/maven-it-plugin/src/main/java/org/apache/maven/plugin/it/ForkMojo.java Wed Sep  7 07:59:36 2005
@@ -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
@@ -46,6 +48,11 @@
     extends AbstractMojo
 {
     /**
+     * @parameter expression="${component.org.apache.maven.lifecycle.LifecycleExecutor}"
+     */
+    private LifecycleExecutor lifecycleExecutor;
+
+    /**
      * @parameter expression="${session}"
      */
     private MavenSession session;
@@ -55,7 +62,6 @@
      */
     private Settings settings;
 
-
     /**
      * @parameter expression="${project}"
      */
@@ -64,71 +70,103 @@
     /**
      * @parameter expression="${project.basedir}/src/it/"
      */
-    private File projectsDir;
-
-
-    private ArtifactRepository artifactRepo;
-
-    private MavenProjectBuilder projectBuilder;
+    private File integrationTestsDirectory;
 
 
     public void execute()
         throws MojoExecutionException
     {
-        initComponents();
+        try
+        {
+            buildProjects();
+        }
+        catch ( CycleDetectedException e )
+        {
+            throw new MojoExecutionException( "Error building projects", e );
+        }
+        catch ( LifecycleExecutionException e )
+        {
+            throw new MojoExecutionException( "Error building projects", e );
+        }
+    }
 
-        buildProjects( listITPoms() );
+    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 void initComponents()
+    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 @@
                 {
                     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;
-    }
-
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org