You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2009/02/10 01:17:02 UTC
svn commit: r742799 - in /maven/components/branches/maven-2.1.x:
maven-core/src/main/java/org/apache/maven/plugin/
maven-project/src/main/java/org/apache/maven/project/
Author: jdcasey
Date: Tue Feb 10 00:17:02 2009
New Revision: 742799
URL: http://svn.apache.org/viewvc?rev=742799&view=rev
Log:
[MNG-3023] Fine-tuned integration tests, and adjusted resolution of active project artifacts (artifacts of sibling projects in the same reactor build) so they can be re-resolved in the event the active project artifact is tested for a file too early on in the build...also added some logging to warn users of sibling projects that cannot be resolved in time for use in the build.
Modified:
maven/components/branches/maven-2.1.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
Modified: maven/components/branches/maven-2.1.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=742799&r1=742798&r2=742799&view=diff
==============================================================================
--- maven/components/branches/maven-2.1.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/branches/maven-2.1.x/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Tue Feb 10 00:17:02 2009
@@ -1434,6 +1434,10 @@
{
project.setDependencyArtifacts( project.createArtifacts( artifactFactory, null, null ) );
}
+ else
+ {
+ project.resolveActiveArtifacts();
+ }
Set resolvedArtifacts;
try
Modified: maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=742799&r1=742798&r2=742799&view=diff
==============================================================================
--- maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Tue Feb 10 00:17:02 2009
@@ -1014,7 +1014,7 @@
Model originalModel = project.getOriginalModel();
// We will return a different project object using the new model (hence the need to return a project, not just modify the parameter)
- project = new MavenProject( model );
+ project = new MavenProject( model, getLogger() );
project.setOriginalModel( originalModel );
@@ -1217,7 +1217,7 @@
}
}
- MavenProject project = new MavenProject( model );
+ MavenProject project = new MavenProject( model, getLogger() );
project.setActiveProfiles( activeProfiles );
project.setOriginalModel( originalModel );
Modified: maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java?rev=742799&r1=742798&r2=742799&view=diff
==============================================================================
--- maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java (original)
+++ maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/MavenProject.java Tue Feb 10 00:17:02 2009
@@ -26,6 +26,7 @@
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -64,6 +65,7 @@
import org.apache.maven.project.artifact.ActiveProjectArtifact;
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.project.artifact.MavenMetadataSource;
+import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.xml.Xpp3Dom;
/**
@@ -151,6 +153,8 @@
private File basedir;
+ private Logger logger;
+
public MavenProject()
{
Model model = new Model();
@@ -167,6 +171,12 @@
this.setModel( model );
}
+ public MavenProject( Model model, Logger logger )
+ {
+ this.setModel( model );
+ this.setLogger( logger );
+ }
+
/**
* @deprecated use {@link #clone()} so subclasses can provide a copy of the same class
*/
@@ -1722,6 +1732,36 @@
{
return snapshotArtifactRepository;
}
+
+ public void resolveActiveArtifacts()
+ {
+ Set depArtifacts = getDependencyArtifacts();
+ if ( depArtifacts == null )
+ {
+ return;
+ }
+
+ Set updated = new HashSet( depArtifacts.size() );
+ int updatedCount = 0;
+
+ for ( Iterator it = depArtifacts.iterator(); it.hasNext(); )
+ {
+ Artifact depArtifact = (Artifact) it.next();
+ Artifact replaced = replaceWithActiveArtifact( depArtifact );
+
+ if ( depArtifact != replaced )
+ {
+ updatedCount++;
+ }
+
+ updated.add( replaced );
+ }
+
+ if ( updatedCount > 0 )
+ {
+ setDependencyArtifacts( updated );
+ }
+ }
public Artifact replaceWithActiveArtifact( Artifact pluginArtifact )
{
@@ -1743,48 +1783,76 @@
}
else
{
-/* TODO...
- logger.warn( "Artifact found in the reactor has not been built when it's use was " +
- "attempted - resolving from the repository instead" );
-*/
+ logMissingSiblingProjectArtifact( pluginArtifact );
}
}
Iterator itr = ref.getAttachedArtifacts().iterator();
- while(itr.hasNext()) {
+ while ( itr.hasNext() )
+ {
Artifact attached = (Artifact) itr.next();
- if( attached.getDependencyConflictId().equals(pluginArtifact.getDependencyConflictId()) ) {
- /* TODO: if I use the original, I get an exception below:
- java.lang.UnsupportedOperationException: Cannot change the download information for an attached artifact. It is derived from the main artifact.
- at org.apache.maven.project.artifact.AttachedArtifact.setDownloadUrl(AttachedArtifact.java:89)
- at org.apache.maven.project.artifact.MavenMetadataSource.retrieve(MavenMetadataSource.java:205)
- at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:275)
- at org.apache.maven.artifact.resolver.DefaultArtifactCollector.collect(DefaultArtifactCollector.java:67)
- at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:223)
- at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:211)
- at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:182)
- at org.apache.maven.plugin.DefaultPluginManager.resolveTransitiveDependencies(DefaultPluginManager.java:1117)
- at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:366)
- at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:534)
- at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:475)
- at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:454)
- at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:306)
- at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
- at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
- at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
- at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
- at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
- */
- Artifact resultArtifact=ArtifactUtils.copyArtifact(attached);
- resultArtifact.setScope(pluginArtifact.getScope());
- return resultArtifact;
+ if ( attached.getDependencyConflictId().equals( pluginArtifact.getDependencyConflictId() ) )
+ {
+ if ( attached.getFile() != null && attached.getFile().exists() )
+ {
+ /* TODO: if I use the original, I get an exception below:
+ java.lang.UnsupportedOperationException: Cannot change the download information for an attached artifact. It is derived from the main artifact.
+ at org.apache.maven.project.artifact.AttachedArtifact.setDownloadUrl(AttachedArtifact.java:89)
+ at org.apache.maven.project.artifact.MavenMetadataSource.retrieve(MavenMetadataSource.java:205)
+ at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:275)
+ at org.apache.maven.artifact.resolver.DefaultArtifactCollector.collect(DefaultArtifactCollector.java:67)
+ at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:223)
+ at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:211)
+ at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:182)
+ at org.apache.maven.plugin.DefaultPluginManager.resolveTransitiveDependencies(DefaultPluginManager.java:1117)
+ at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:366)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:534)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:475)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:454)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:306)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
+ at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
+ at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
+ at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
+ at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
+ */
+
+ Artifact resultArtifact = ArtifactUtils.copyArtifact( attached );
+ resultArtifact.setScope( pluginArtifact.getScope() );
+
+ return resultArtifact;
+ }
}
+ else
+ {
+ logMissingSiblingProjectArtifact( pluginArtifact );
+ }
+
+ break;
}
}
}
return pluginArtifact;
}
+ private void logMissingSiblingProjectArtifact( Artifact artifact )
+ {
+ if ( logger == null )
+ {
+ return;
+ }
+
+ StringBuffer message = new StringBuffer();
+ message.append( "A dependency of the current project (or of one the plugins used in its build)was found in the reactor, " );
+ message.append( "\nbut had not been built at the time it was requested. It will be resolved from the repository instead." );
+ message.append( "\n\nCurrent Project: " ).append( getName() );
+ message.append( "\nRequested Dependency: " ).append( artifact.getId() );
+ message.append( "\n\nNOTE: You may need to run this build to the 'compile' lifecycle phase, or farther, in order to build the dependency artifact." );
+ message.append( "\n" );
+
+ logger.warn( message.toString() );
+ }
+
private void addArtifactPath(Artifact a, List list) throws DependencyResolutionRequiredException
{
File file = a.getFile();
@@ -2021,4 +2089,9 @@
this.preservedBasedir = getBasedir();
}
+ public void setLogger( Logger logger )
+ {
+ this.logger = logger;
+ }
+
}