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 2007/10/28 15:13:59 UTC
svn commit: r589357 -
/maven/components/branches/maven-2.0.x-mng2277/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
Author: brianf
Date: Sun Oct 28 07:13:59 2007
New Revision: 589357
URL: http://svn.apache.org/viewvc?rev=589357&view=rev
Log:
MNG-2277
Modified:
maven/components/branches/maven-2.0.x-mng2277/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
Modified: maven/components/branches/maven-2.0.x-mng2277/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x-mng2277/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=589357&r1=589356&r2=589357&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x-mng2277/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/branches/maven-2.0.x-mng2277/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Sun Oct 28 07:13:59 2007
@@ -30,6 +30,7 @@
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
@@ -398,7 +399,7 @@
MavenProject p = (MavenProject) i.next();
resolveTransitiveDependencies( session, artifactResolver,
- mojoDescriptor.isDependencyResolutionRequired(), artifactFactory, p );
+ mojoDescriptor.isDependencyResolutionRequired(), artifactFactory, p, mojoDescriptor.isAggregator() );
}
downloadDependencies( project, session, artifactResolver );
@@ -1222,7 +1223,7 @@
ArtifactResolver artifactResolver,
String scope,
ArtifactFactory artifactFactory,
- MavenProject project )
+ MavenProject project, boolean isAggregator )
throws ArtifactResolutionException, ArtifactNotFoundException, InvalidDependencyVersionException
{
ArtifactFilter filter = new ScopeArtifactFilter( scope );
@@ -1238,16 +1239,77 @@
{
project.setDependencyArtifacts( project.createArtifacts( artifactFactory, null, null ) );
}
- ArtifactResolutionResult result = artifactResolver.resolveTransitively( project.getDependencyArtifacts(),
+
+ Set resolvedArtifacts;
+ try
+ {
+ ArtifactResolutionResult result = artifactResolver.resolveTransitively( project.getDependencyArtifacts(),
artifact,
project.getManagedVersionMap(),
context.getLocalRepository(),
project.getRemoteArtifactRepositories(),
artifactMetadataSource, filter );
-
- project.setArtifacts( result.getArtifacts() );
+ resolvedArtifacts = result.getArtifacts();
+ }
+ catch (MultipleArtifactsNotFoundException me)
+ {
+ /*only do this if we are an aggregating plugin: MNG-2277
+ if the dependency doesn't yet exist but is in the reactor, then
+ all we can do is warn and skip it. A better fix can be inserted into 2.1*/
+ if (isAggregator && checkMissingArtifactsInReactor( context.getSortedProjects(), me.getMissingArtifacts() ))
+ {
+ resolvedArtifacts = new HashSet(me.getResolvedArtifacts());
+ }
+ else
+ {
+ //we can't find all the artifacts in the reactor so bubble the exception up.
+ throw me;
+ }
+ }
+ project.setArtifacts( resolvedArtifacts );
}
+ /**
+ * This method is checking to see if the artifacts that can't be resolved are all
+ * part of this reactor. This is done to prevent a chicken or egg scenario with
+ * fresh projects that have a plugin that is an aggregator and requires dependencies. See
+ * MNG-2277 for more info.
+ * @param projects the sibling projects in the reactor
+ * @param missing the artifacts that can't be found
+ * @return true if ALL missing artifacts are found in the reactor.
+ */
+ private boolean checkMissingArtifactsInReactor(Collection projects, Collection missing)
+ {
+ Collection foundInReactor = new HashSet();
+ Iterator iter = missing.iterator();
+ while (iter.hasNext())
+ {
+ Artifact mArtifact = (Artifact) iter.next();
+ Iterator pIter = projects.iterator();
+ while (pIter.hasNext())
+ {
+ MavenProject p = (MavenProject) pIter.next();
+ if (p.getArtifactId().equals( mArtifact.getArtifactId()) &&
+ p.getGroupId().equals( mArtifact.getGroupId()) &&
+ p.getVersion().equals( mArtifact.getVersion()))
+ {
+ //TODO: the packaging could be different, but the exception doesn't contain that info
+ //most likely it would be produced by the project we just found in the reactor since all
+ //the other info matches. Assume it's ok.
+ getLogger().warn( "The dependency: "+ p.getId()+" can't be resolved but has been found in the reactor.\nThis dependency has been excluded from the plugin execution. You should rerun this mojo after executing mvn install.\n" );
+
+ //found it, move on.
+ foundInReactor.add( p );
+ break;
+ }
+ }
+ }
+
+ //if all of them have been found, we can continue.
+ return foundInReactor.size() == missing.size();
+ }
+
+
// ----------------------------------------------------------------------
// Artifact downloading
// ----------------------------------------------------------------------