You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by br...@apache.org on 2005/09/22 06:35:03 UTC
svn commit: r290887 - in /maven/components/trunk: maven-core-it/it0042/
maven-core-it/it0042/test-component-c/ maven-core-it/it0042/test-plugin/
maven-core-it/it0042/test-plugin/src/
maven-core-it/it0042/test-plugin/src/main/ maven-core-it/it0042/test-...
Author: brett
Date: Wed Sep 21 21:34:41 2005
New Revision: 290887
URL: http://svn.apache.org/viewcvs?rev=290887&view=rev
Log:
PR: MNG-870
MAke plugin discovery reactor aware
Added:
maven/components/trunk/maven-core-it/it0042/test-plugin/
maven/components/trunk/maven-core-it/it0042/test-plugin/pom.xml (with props)
maven/components/trunk/maven-core-it/it0042/test-plugin/src/
maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/
maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/
maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/
maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/
maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/
maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/plugin/
maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/plugin/coreit/
maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java (with props)
Modified:
maven/components/trunk/maven-core-it/it0042/expected-results.txt
maven/components/trunk/maven-core-it/it0042/pom.xml
maven/components/trunk/maven-core-it/it0042/test-component-c/pom.xml
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/main/java/org/apache/maven/plugin/DefaultPluginManager.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.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-it/it0042/expected-results.txt
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0042/expected-results.txt?rev=290887&r1=290886&r2=290887&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/it0042/expected-results.txt (original)
+++ maven/components/trunk/maven-core-it/it0042/expected-results.txt Wed Sep 21 21:34:41 2005
@@ -3,3 +3,4 @@
test-component-c/target/test-component-c-0.1.war
test-component-c/target/test-component-c-0.1.war!/WEB-INF/lib/test-component-a-0.1.jar
test-component-c/target/test-component-c-0.1.war!/WEB-INF/lib/test-component-b-0.1.jar
+test-component-c/target/my-test
Modified: maven/components/trunk/maven-core-it/it0042/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0042/pom.xml?rev=290887&r1=290886&r2=290887&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/it0042/pom.xml (original)
+++ maven/components/trunk/maven-core-it/it0042/pom.xml Wed Sep 21 21:34:41 2005
@@ -10,5 +10,6 @@
<module>test-component-c</module>
<module>test-component-b</module>
<module>test-component-a</module>
+ <module>test-plugin</module>
</modules>
</project>
Modified: maven/components/trunk/maven-core-it/it0042/test-component-c/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0042/test-component-c/pom.xml?rev=290887&r1=290886&r2=290887&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/it0042/test-component-c/pom.xml (original)
+++ maven/components/trunk/maven-core-it/it0042/test-component-c/pom.xml Wed Sep 21 21:34:41 2005
@@ -19,4 +19,24 @@
<version>0.1</version>
</dependency>
</dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>test</groupId>
+ <artifactId>test-plugin</artifactId>
+ <version>0.1</version>
+ <configuration>
+ <value>my-test</value>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
</project>
Added: maven/components/trunk/maven-core-it/it0042/test-plugin/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0042/test-plugin/pom.xml?rev=290887&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0042/test-plugin/pom.xml (added)
+++ maven/components/trunk/maven-core-it/it0042/test-plugin/pom.xml Wed Sep 21 21:34:41 2005
@@ -0,0 +1,21 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>test-components</artifactId>
+ <groupId>test</groupId>
+ <version>0.1</version>
+ </parent>
+
+ <groupId>test</groupId>
+ <artifactId>test-plugin</artifactId>
+ <packaging>maven-plugin</packaging>
+ <version>0.1</version>
+ <name>Test Plugin</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0-beta-1</version>
+ </dependency>
+ </dependencies>
+</project>
Propchange: maven/components/trunk/maven-core-it/it0042/test-plugin/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core-it/it0042/test-plugin/pom.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java?rev=290887&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java (added)
+++ maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java Wed Sep 21 21:34:41 2005
@@ -0,0 +1,77 @@
+package org.apache.maven.plugin.coreit;
+
+/*
+ * Copyright 2001-2004 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.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * @goal test
+ *
+ * @phase process-sources
+ *
+ * @description Goal which cleans the build
+ */
+public class CoreItMojo
+ extends AbstractMojo
+{
+ /**
+ * @parameter expression="${project.build.directory}"
+ * @required
+ */
+ private String outputDirectory;
+
+ /**
+ * @parameter
+ * @required
+ */
+ private String value;
+
+ public void execute()
+ throws MojoExecutionException
+ {
+ touch( new File( outputDirectory ), value );
+ }
+
+ private static void touch( File dir, String file )
+ throws MojoExecutionException
+ {
+ try
+ {
+ if ( !dir.exists() )
+ {
+ dir.mkdirs();
+ }
+
+ File touch = new File( dir, file );
+
+ FileWriter w = new FileWriter( touch );
+
+ w.write( file );
+
+ w.close();
+ }
+ catch ( IOException e )
+ {
+ throw new MojoExecutionException( "Error touching file", e );
+ }
+ }
+}
Propchange: maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/components/trunk/maven-core-it/it0042/test-plugin/src/main/java/org/apache/maven/plugin/coreit/CoreItMojo.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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=290887&r1=290886&r2=290887&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 Wed Sep 21 21:34:41 2005
@@ -194,7 +194,7 @@
Throwable exception = response.getException();
if ( ReactorManager.FAIL_AT_END.equals( rm.getFailureBehavior() ) &&
- ( exception instanceof ReactorException ) )
+ exception instanceof ReactorException )
{
logFailure( response, exception, null );
@@ -268,11 +268,9 @@
getLogger().info( "Reactor Summary:" );
line();
- for ( Iterator it = rm.getProjectsSortedByDependency().iterator(); it.hasNext(); )
+ for ( Iterator it = rm.getSortedProjects().iterator(); it.hasNext(); )
{
MavenProject project = (MavenProject) it.next();
-
- String id = project.getId();
if ( rm.hasBuildFailure( project ) )
{
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=290887&r1=290886&r2=290887&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 Wed Sep 21 21:34:41 2005
@@ -1,18 +1,27 @@
package org.apache.maven.execution;
+/*
+ * 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.
+ */
+
import org.apache.maven.artifact.ArtifactUtils;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Extension;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.ReportPlugin;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectSorter;
import org.codehaus.plexus.util.dag.CycleDetectedException;
-import org.codehaus.plexus.util.dag.DAG;
-import org.codehaus.plexus.util.dag.TopologicalSorter;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -20,136 +29,37 @@
public class ReactorManager
{
-
public static final String FAIL_FAST = "fail-fast";
public static final String FAIL_AT_END = "fail-at-end";
public static final String FAIL_NEVER = "fail-never";
- private DAG reactorDag;
-
- private Map projectMap;
-
- private List projectsByDependency;
-
private List blackList = new ArrayList();
- private MavenProject topLevelProject;
-
private Map buildFailuresByProject = new HashMap();
private String failureBehavior = FAIL_FAST;
+ private final ProjectSorter sorter;
+
public ReactorManager( List projects )
throws CycleDetectedException
{
- reactorDag = new DAG();
-
- projectMap = new HashMap();
-
- for ( Iterator i = projects.iterator(); i.hasNext(); )
- {
- MavenProject project = (MavenProject) i.next();
-
- String id = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
-
- reactorDag.addVertex( id );
-
- projectMap.put( id, project );
- }
-
- for ( Iterator i = projects.iterator(); i.hasNext(); )
- {
- MavenProject project = (MavenProject) i.next();
-
- String id = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
-
- for ( Iterator j = project.getDependencies().iterator(); j.hasNext(); )
- {
- Dependency dependency = (Dependency) j.next();
-
- String dependencyId = ArtifactUtils.versionlessKey( dependency.getGroupId(), dependency.getArtifactId() );
-
- if ( reactorDag.getVertex( dependencyId ) != null )
- {
- project.addProjectReference( (MavenProject) projectMap.get( dependencyId ) );
-
- reactorDag.addEdge( id, dependencyId );
- }
- }
-
- MavenProject parent = project.getParent();
- if ( parent != null )
- {
- String parentId = ArtifactUtils.versionlessKey( parent.getGroupId(), parent.getArtifactId() );
- if ( reactorDag.getVertex( parentId ) != null )
- {
- reactorDag.addEdge( id, parentId );
- }
- }
-
- List buildPlugins = project.getBuildPlugins();
- if ( buildPlugins != null )
- {
- for ( Iterator j = buildPlugins.iterator(); j.hasNext(); )
- {
- Plugin plugin = (Plugin) j.next();
- String pluginId = ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() );
- if ( reactorDag.getVertex( pluginId ) != null )
- {
- reactorDag.addEdge( id, pluginId );
- }
- }
- }
-
- List reportPlugins = project.getReportPlugins();
- if ( reportPlugins != null )
- {
- for ( Iterator j = reportPlugins.iterator(); j.hasNext(); )
- {
- ReportPlugin plugin = (ReportPlugin) j.next();
- String pluginId = ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() );
- if ( reactorDag.getVertex( pluginId ) != null )
- {
- reactorDag.addEdge( id, pluginId );
- }
- }
- }
-
- for ( Iterator j = project.getBuildExtensions().iterator(); j.hasNext(); )
- {
- Extension extension = (Extension) j.next();
- String extensionId = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() );
- if ( reactorDag.getVertex( extensionId ) != null )
- {
- reactorDag.addEdge( id, extensionId );
- }
- }
- }
-
- projectsByDependency = new ArrayList();
-
- for ( Iterator i = TopologicalSorter.sort( reactorDag ).iterator(); i.hasNext(); )
- {
- String id = (String) i.next();
-
- projectsByDependency.add( projectMap.get( id ) );
- }
-
- projectsByDependency = Collections.unmodifiableList( projectsByDependency );
+ this.sorter = new ProjectSorter( projects );
}
public void setFailureBehavior( String failureBehavior )
{
- if ( FAIL_FAST.equals( failureBehavior ) || FAIL_AT_END.equals( failureBehavior ) || FAIL_NEVER.equals( failureBehavior ) )
+ if ( FAIL_FAST.equals( failureBehavior ) || FAIL_AT_END.equals( failureBehavior ) ||
+ FAIL_NEVER.equals( failureBehavior ) )
{
this.failureBehavior = failureBehavior;
}
else
{
- throw new IllegalArgumentException( "Invalid failure behavior (must be one of: \'" + FAIL_FAST + "\', \'"
- + FAIL_AT_END + "\', \'" + FAIL_NEVER + "\')." );
+ throw new IllegalArgumentException( "Invalid failure behavior (must be one of: \'" + FAIL_FAST + "\', \'" +
+ FAIL_AT_END + "\', \'" + FAIL_NEVER + "\')." );
}
}
@@ -158,30 +68,9 @@
return failureBehavior;
}
- public List getProjectsSortedByDependency()
- {
- return projectsByDependency;
- }
-
- // TODO: !![jc; 28-jul-2005] check this; if we're using '-r' and there are aggregator tasks, this will result in weirdness.
- public MavenProject getTopLevelProject()
- {
- if ( topLevelProject == null )
- {
- List projectsByFile = new ArrayList( projectsByDependency );
-
- Collections.sort(projectsByFile, new ByProjectFileComparator() );
-
- topLevelProject = (MavenProject) projectsByFile.get( 0 );
- }
-
- return topLevelProject;
- }
-
public void blackList( MavenProject project )
{
- blackList(
- ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ) );
+ blackList( ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ) );
}
private void blackList( String id )
@@ -190,7 +79,7 @@
{
blackList.add( id );
- List dependents = reactorDag.getParentLabels( id );
+ List dependents = sorter.getDependents( id );
if ( dependents != null && !dependents.isEmpty() )
{
@@ -206,8 +95,7 @@
public boolean isBlackListed( MavenProject project )
{
- return blackList.contains(
- ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ) );
+ return blackList.contains( ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() ) );
}
public void registerBuildFailure( MavenProject project, Exception error, String task )
@@ -227,40 +115,18 @@
public boolean hasMultipleProjects()
{
- return projectsByDependency.size() > 1;
+ return sorter.hasMultipleProjects();
}
- private static class ByProjectFileComparator implements Comparator
+ public List getSortedProjects()
{
-
- public int compare( Object first, Object second )
- {
- MavenProject p1 = (MavenProject) first;
- MavenProject p2 = (MavenProject) second;
-
- String p1Path = p1.getFile().getAbsolutePath();
- String p2Path = p2.getFile().getAbsolutePath();
-
- int comparison = p1Path.length() - p2Path.length();
-
- if ( comparison > 0 )
- {
- return 1;
- }
- else if ( comparison < 0 )
- {
- return -1;
- }
- else
- {
- return 0;
- }
- }
+ return sorter.getSortedProjects();
}
private static class BuildFailure
{
private Exception cause;
+
private String task;
BuildFailure( Exception cause, String task )
Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=290887&r1=290886&r2=290887&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Wed Sep 21 21:34:41 2005
@@ -48,6 +48,7 @@
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.artifact.ActiveProjectArtifact;
import org.apache.maven.project.path.PathTranslator;
import org.apache.maven.reporting.MavenReport;
import org.apache.maven.settings.Settings;
@@ -262,6 +263,18 @@
ArtifactRepository localRepository )
throws ArtifactResolutionException, PlexusContainerException
{
+ // TODO: share with MMS? Not sure if it belongs here
+ if ( project.getProjectReferences() != null && !project.getProjectReferences().isEmpty() )
+ {
+ // TODO: use MavenProject getProjectReferenceId
+ String refId = plugin.getGroupId() + ":" + plugin.getArtifactId();
+ MavenProject ref = (MavenProject) project.getProjectReferences().get( refId );
+ if ( ref != null && ref.getArtifact() != null )
+ {
+ pluginArtifact = new ActiveProjectArtifact( ref, pluginArtifact );
+ }
+ }
+
artifactResolver.resolve( pluginArtifact, project.getPluginArtifactRepositories(), localRepository );
PlexusContainer child = container.createChildContainer( plugin.getKey(),
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=290887&r1=290886&r2=290887&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Wed Sep 21 21:34:41 2005
@@ -664,6 +664,8 @@
}
project.setRemoteArtifactRepositories( remoteRepositories );
+
+ // TODO: these aren't taking active project artifacts into consideration in the reactor
project.setPluginArtifacts( createPluginArtifacts( project.getBuildPlugins() ) );
project.setReportArtifacts( createReportArtifacts( project.getReportPlugins() ) );
project.setExtensionArtifacts( createExtensionArtifacts( project.getBuildExtensions() ) );
@@ -1045,6 +1047,7 @@
return pluginArtifacts;
}
+ // TODO: share with createPluginArtifacts?
protected Set createReportArtifacts( List reports )
throws ProjectBuildingException
{
@@ -1087,6 +1090,7 @@
return pluginArtifacts;
}
+ // TODO: share with createPluginArtifacts?
protected Set createExtensionArtifacts( List extensions )
throws ProjectBuildingException
{
@@ -1112,8 +1116,7 @@
try
{
artifact = artifactFactory.createExtensionArtifact( ext.getGroupId(), ext.getArtifactId(),
- VersionRange
- .createFromVersionSpec( version ) );
+ VersionRange.createFromVersionSpec( version ) );
}
catch ( InvalidVersionSpecificationException e )
{
Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=290887&r1=290886&r2=290887&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Wed Sep 21 21:34:41 2005
@@ -1444,4 +1444,9 @@
{
return getBuild().getFilters();
}
+
+ public Map getProjectReferences()
+ {
+ return projectReferences;
+ }
}
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=290887&r1=290886&r2=290887&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 Wed Sep 21 21:34:41 2005
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Extension;
import org.apache.maven.model.Plugin;
@@ -25,6 +26,8 @@
import org.codehaus.plexus.util.dag.TopologicalSorter;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -38,10 +41,11 @@
*/
public class ProjectSorter
{
- private ProjectSorter()
- {
- // no touchy...
- }
+ private final DAG dag;
+
+ private final List sortedProjects;
+
+ private MavenProject topLevelProject;
/**
* Sort a list of projects.
@@ -54,10 +58,10 @@
* <li>do a topo sort on the graph that remains.</li>
* </ul>
*/
- public static List getSortedProjects( List projects )
+ public ProjectSorter( List projects )
throws CycleDetectedException
{
- DAG dag = new DAG();
+ dag = new DAG();
Map projectMap = new HashMap();
@@ -65,7 +69,7 @@
{
MavenProject project = (MavenProject) i.next();
- String id = getId( project.getGroupId(), project.getArtifactId() );
+ String id = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
dag.addVertex( id );
@@ -76,13 +80,14 @@
{
MavenProject project = (MavenProject) i.next();
- String id = getId( project.getGroupId(), project.getArtifactId() );
+ String id = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
for ( Iterator j = project.getDependencies().iterator(); j.hasNext(); )
{
Dependency dependency = (Dependency) j.next();
- String dependencyId = getId( dependency.getGroupId(), dependency.getArtifactId() );
+ String dependencyId = ArtifactUtils.versionlessKey( dependency.getGroupId(),
+ dependency.getArtifactId() );
if ( dag.getVertex( dependencyId ) != null )
{
@@ -95,7 +100,7 @@
MavenProject parent = project.getParent();
if ( parent != null )
{
- String parentId = getId( parent.getGroupId(), parent.getArtifactId() );
+ String parentId = ArtifactUtils.versionlessKey( parent.getGroupId(), parent.getArtifactId() );
if ( dag.getVertex( parentId ) != null )
{
dag.addEdge( id, parentId );
@@ -108,9 +113,11 @@
for ( Iterator j = buildPlugins.iterator(); j.hasNext(); )
{
Plugin plugin = (Plugin) j.next();
- String pluginId = getId( plugin.getGroupId(), plugin.getArtifactId() );
+ String pluginId = ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() );
if ( dag.getVertex( pluginId ) != null )
{
+ project.addProjectReference( (MavenProject) projectMap.get( pluginId ) );
+
dag.addEdge( id, pluginId );
}
}
@@ -122,9 +129,11 @@
for ( Iterator j = reportPlugins.iterator(); j.hasNext(); )
{
ReportPlugin plugin = (ReportPlugin) j.next();
- String pluginId = getId( plugin.getGroupId(), plugin.getArtifactId() );
+ String pluginId = ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() );
if ( dag.getVertex( pluginId ) != null )
{
+ project.addProjectReference( (MavenProject) projectMap.get( pluginId ) );
+
dag.addEdge( id, pluginId );
}
}
@@ -133,9 +142,11 @@
for ( Iterator j = project.getBuildExtensions().iterator(); j.hasNext(); )
{
Extension extension = (Extension) j.next();
- String extensionId = getId( extension.getGroupId(), extension.getArtifactId() );
+ String extensionId = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() );
if ( dag.getVertex( extensionId ) != null )
{
+ project.addProjectReference( (MavenProject) projectMap.get( extensionId ) );
+
dag.addEdge( id, extensionId );
}
}
@@ -150,11 +161,66 @@
sortedProjects.add( projectMap.get( id ) );
}
+ this.sortedProjects = Collections.unmodifiableList( sortedProjects );
+ }
+
+ // TODO: !![jc; 28-jul-2005] check this; if we're using '-r' and there are aggregator tasks, this will result in weirdness.
+ public MavenProject getTopLevelProject()
+ {
+ if ( topLevelProject == null )
+ {
+ List projectsByFile = new ArrayList( sortedProjects );
+
+ Collections.sort( projectsByFile, new ByProjectFileComparator() );
+
+ topLevelProject = (MavenProject) projectsByFile.get( 0 );
+ }
+
+ return topLevelProject;
+ }
+
+ public List getSortedProjects()
+ {
return sortedProjects;
}
- private static String getId( String groupId, String artifactId )
+ public boolean hasMultipleProjects()
{
- return groupId + ":" + artifactId;
+ return sortedProjects.size() > 1;
}
+
+ public List getDependents( String id )
+ {
+ return dag.getParentLabels( id );
+ }
+
+ private static class ByProjectFileComparator
+ implements Comparator
+ {
+
+ public int compare( Object first, Object second )
+ {
+ MavenProject p1 = (MavenProject) first;
+ MavenProject p2 = (MavenProject) second;
+
+ String p1Path = p1.getFile().getAbsolutePath();
+ String p2Path = p2.getFile().getAbsolutePath();
+
+ int comparison = p1Path.length() - p2Path.length();
+
+ if ( comparison > 0 )
+ {
+ return 1;
+ }
+ else if ( comparison < 0 )
+ {
+ return -1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+
}
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=290887&r1=290886&r2=290887&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 Wed Sep 21 21:34:41 2005
@@ -43,7 +43,7 @@
projects.add( project2 );
project1.getDependencies().add( createDependency( project2 ) );
- projects = ProjectSorter.getSortedProjects( projects );
+ projects = new ProjectSorter( projects ).getSortedProjects();
assertEquals( project2, projects.get( 0 ) );
assertEquals( project1, projects.get( 1 ) );
@@ -59,7 +59,7 @@
projects.add( project2 );
project1.getDependencies().add( createDependency( project2 ) );
- projects = ProjectSorter.getSortedProjects( projects );
+ projects = new ProjectSorter( projects ).getSortedProjects();
assertEquals( project2, projects.get( 0 ) );
assertEquals( project1, projects.get( 1 ) );
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org