You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2005/10/23 10:07:45 UTC

svn commit: r327763 - in /maven/components/trunk: maven-core/src/main/java/org/apache/maven/ maven-core/src/main/java/org/apache/maven/execution/ maven-core/src/test/java/org/apache/maven/plugin/ maven-project/src/main/java/org/apache/maven/project/ ma...

Author: brett
Date: Sun Oct 23 01:07:38 2005
New Revision: 327763

URL: http://svn.apache.org/viewcvs?rev=327763&view=rev
Log:
PR: MNG-1223
error out if there are duplicate modules in the reactor

Added:
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DuplicateProjectException.java   (with props)
Modified:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
    maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=327763&r1=327762&r2=327763&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java Sun Oct 23 01:07:38 2005
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+
 import org.apache.maven.artifact.manager.WagonManager;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
@@ -32,6 +33,7 @@
 import org.apache.maven.monitor.event.MavenEvents;
 import org.apache.maven.profiles.ProfileManager;
 import org.apache.maven.profiles.activation.ProfileActivationException;
+import org.apache.maven.project.DuplicateProjectException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.ProjectBuildingException;
@@ -294,8 +296,12 @@
         }
         catch ( CycleDetectedException e )
         {
-            throw new MavenExecutionException(
+            throw new BuildFailureException(
                 "The projects in the reactor contain a cyclic reference: " + e.getMessage(), e );
+        }
+        catch ( DuplicateProjectException e )
+        {
+            throw new BuildFailureException( e.getMessage(), e );
         }
 
         if ( rm.hasMultipleProjects() )

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java?rev=327763&r1=327762&r2=327763&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java Sun Oct 23 01:07:38 2005
@@ -16,8 +16,10 @@
  * limitations under the License.
  */
 
+
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.DuplicateProjectException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectSorter;
 import org.codehaus.plexus.util.dag.CycleDetectedException;
@@ -49,7 +51,7 @@
     private Map buildSuccessesByProject = new HashMap();
 
     public ReactorManager( List projects )
-        throws CycleDetectedException
+        throws CycleDetectedException, DuplicateProjectException
     {
         this.sorter = new ProjectSorter( projects );
     }

Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java?rev=327763&r1=327762&r2=327763&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java Sun Oct 23 01:07:38 2005
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -28,6 +29,7 @@
 import org.apache.maven.monitor.event.DefaultEventDispatcher;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.DuplicateProjectException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.settings.Settings;
 import org.codehaus.plexus.PlexusContainer;
@@ -141,7 +143,7 @@
     }
 
     private static MavenSession createSession( PlexusContainer container, ArtifactRepository repo )
-        throws CycleDetectedException
+        throws CycleDetectedException, DuplicateProjectException
     {
         return new MavenSession( container, new Settings(), repo, new DefaultEventDispatcher(),
                                  new ReactorManager( Collections.EMPTY_LIST ), Collections.EMPTY_LIST, ".",

Added: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DuplicateProjectException.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DuplicateProjectException.java?rev=327763&view=auto
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DuplicateProjectException.java (added)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DuplicateProjectException.java Sun Oct 23 01:07:38 2005
@@ -0,0 +1,38 @@
+package org.apache.maven.project;
+
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+/**
+ * Exception that occurs when the project list contains duplicate projects instead of ignoring one.
+ * 
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class DuplicateProjectException
+    extends Exception
+{
+    public DuplicateProjectException( String message )
+    {
+        super( message );
+    }
+    
+    public DuplicateProjectException( String message, Exception e )
+    {
+        super( message, e );
+    }
+}

Propchange: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DuplicateProjectException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DuplicateProjectException.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java?rev=327763&r1=327762&r2=327763&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java Sun Oct 23 01:07:38 2005
@@ -56,9 +56,10 @@
      * we are trying to build. we assume a closed set.</li>
      * <li>do a topo sort on the graph that remains.</li>
      * </ul>
+     * @throws DuplicateProjectException if any projects are duplicated by id
      */
     public ProjectSorter( List projects )
-        throws CycleDetectedException
+        throws CycleDetectedException, DuplicateProjectException
     {
         dag = new DAG();
 
@@ -70,6 +71,11 @@
 
             String id = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
 
+            if ( dag.getVertex( id ) != null )
+            {
+                throw new DuplicateProjectException( "Project '" + id + "' is duplicated in the reactor" );
+            }
+            
             dag.addVertex( id );
 
             projectMap.put( id, project );

Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java?rev=327763&r1=327762&r2=327763&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java Sun Oct 23 01:07:38 2005
@@ -34,7 +34,7 @@
     extends TestCase
 {
     public void testMatchingArtifactIdsDifferentGroupIds()
-        throws CycleDetectedException
+        throws CycleDetectedException, DuplicateProjectException
     {
         List projects = new ArrayList();
         MavenProject project1 = createProject( "groupId1", "artifactId", "1.0" );
@@ -50,7 +50,7 @@
     }
 
     public void testMatchingGroupIdsDifferentArtifactIds()
-        throws CycleDetectedException
+        throws CycleDetectedException, DuplicateProjectException
     {
         List projects = new ArrayList();
         MavenProject project1 = createProject( "groupId", "artifactId1", "1.0" );
@@ -63,6 +63,48 @@
 
         assertEquals( project2, projects.get( 0 ) );
         assertEquals( project1, projects.get( 1 ) );
+    }
+
+    public void testMatchingIdsAndVersions()
+        throws CycleDetectedException
+    {
+        List projects = new ArrayList();
+        MavenProject project1 = createProject( "groupId", "artifactId", "1.0" );
+        projects.add( project1 );
+        MavenProject project2 = createProject( "groupId", "artifactId", "1.0" );
+        projects.add( project2 );
+
+        try 
+        {
+            projects = new ProjectSorter( projects ).getSortedProjects();
+            fail( "Duplicate projects should fail" );
+        }
+        catch ( DuplicateProjectException e )
+        {
+            // expected
+            assertTrue( true );
+        }
+    }
+
+    public void testMatchingIdsAndDifferentVersions()
+        throws CycleDetectedException
+    {
+        List projects = new ArrayList();
+        MavenProject project1 = createProject( "groupId", "artifactId", "1.0" );
+        projects.add( project1 );
+        MavenProject project2 = createProject( "groupId", "artifactId", "2.0" );
+        projects.add( project2 );
+
+        try 
+        {
+            projects = new ProjectSorter( projects ).getSortedProjects();
+            fail( "Duplicate projects should fail" );
+        }
+        catch ( DuplicateProjectException e )
+        {
+            // expected
+            assertTrue( true );
+        }
     }
 
     private Dependency createDependency( MavenProject project )