Author: epunzalan
Date: Wed Mar 1 03:31:36 2006
New Revision: 381991
URL: http://svn.apache.org/viewcvs?rev=381991&view=rev
Log:
PR: MIDEA-16
Removed @requiresDependencyResolution and made the plugin manually resolve the
project so that the build will not fail if an artifact does not resolve.
A warning message is printed instead of failing.
Modified:
maven/plugins/trunk/maven-idea-plugin/pom.xml
maven/plugins/trunk/maven-idea-plugin/src/main/java/org/apache/maven/plugin/idea/IdeaMojo.java
Modified: maven/plugins/trunk/maven-idea-plugin/pom.xml
URL:
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-idea-plugin/pom.xml?rev=381991&r1=381990&r2=381991&view=diff
==============================================================================
--- maven/plugins/trunk/maven-idea-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-idea-plugin/pom.xml Wed Mar 1 03:31:36 2006
@@ -16,8 +16,28 @@
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
<artifactId>maven-artifact-manager</artifactId>
<version>2.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>2.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-provider-api</artifactId>
+ <version>1.0-alpha-5</version>
</dependency>
</dependencies>
</project>
Modified:
maven/plugins/trunk/maven-idea-plugin/src/main/java/org/apache/maven/plugin/idea/IdeaMojo.java
URL:
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-idea-plugin/src/main/java/org/apache/maven/plugin/idea/IdeaMojo.java?rev=381991&r1=381990&r2=381991&view=diff
==============================================================================
---
maven/plugins/trunk/maven-idea-plugin/src/main/java/org/apache/maven/plugin/idea/IdeaMojo.java
(original)
+++
maven/plugins/trunk/maven-idea-plugin/src/main/java/org/apache/maven/plugin/idea/IdeaMojo.java
Wed Mar 1 03:31:36 2006
@@ -17,12 +17,24 @@
*/
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.versioning.VersionRange;
+import
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.manager.WagonManager;
+import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.model.Resource;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.artifact.InvalidDependencyVersionException;
import org.apache.maven.wagon.ResourceDoesNotExistException;
import org.apache.maven.wagon.TransferFailedException;
import org.codehaus.plexus.util.IOUtil;
@@ -44,6 +56,7 @@
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
+import java.util.Collections;
/**
* Goal for generating IDEA files from a POM.
@@ -51,7 +64,6 @@
*
* @goal idea
* @execute phase="generate-sources"
- * @requiresDependencyResolution test
* @todo use dom4j or something. Xpp3Dom can't cope properly with entities and
so on
*/
public class IdeaMojo
@@ -178,6 +190,23 @@
private ArtifactFactory artifactFactory;
/**
+ * @parameter expression="${localRepository}"
+ * @required
+ * @readonly
+ */
+ private ArtifactRepository localRepo;
+
+ /**
+ * @parameter
expression="${component.org.apache.maven.artifact.resolver.ArtifactResolver}"
+ */
+ private ArtifactResolver artifactResolver;
+
+ /**
+ * @parameter
expression="${component.org.apache.maven.artifact.metadata.ArtifactMetadataSource}"
+ */
+ private ArtifactMetadataSource artifactMetadataSource;
+
+ /**
* A temporary cache of artifacts that's already been downloaded or
* attempted to be downloaded. This is to refrain from trying to download a
* dependency that we have already tried to download.
@@ -189,6 +218,15 @@
public void execute()
throws MojoExecutionException
{
+ try
+ {
+ doDependencyResolution();
+ }
+ catch ( Exception e )
+ {
+ throw new MojoExecutionException( "Unable to build project
dependencies.", e );
+ }
+
rewriteModule();
if ( project.isExecutionRoot() )
@@ -199,6 +237,70 @@
}
}
+ private void doDependencyResolution()
+ throws InvalidDependencyVersionException, ProjectBuildingException,
ArtifactNotFoundException,
+ ArtifactResolutionException
+ {
+ if ( project.getDependencies() != null )
+ {
+ List missingArtifacts = new ArrayList();
+
+ Map managedVersions = createManagedVersionMap( project.getId(),
project.getDependencyManagement() );
+
+ ArtifactResolutionResult result =
artifactResolver.resolveTransitively( project.createArtifacts( artifactFactory,
Artifact.SCOPE_TEST, null ), project.getArtifact(), managedVersions,
+ localRepo,
project.getRemoteArtifactRepositories(),
+ artifactMetadataSource );
+
+ //project.setArtifacts( project.createArtifacts( artifactFactory,
Artifact.SCOPE_TEST, null ) );
+ project.setArtifacts( result.getArtifacts() );
+
+ for ( Iterator artifacts = project.getTestArtifacts().iterator();
artifacts.hasNext(); )
+ {
+ Artifact artifact = (Artifact) artifacts.next();
+
+ artifact.setFile( new File( localRepo.getBasedir(),
localRepo.pathOf( artifact ) ) );
+
+ if ( !artifact.getFile().exists() )
+ {
+ try
+ {
+ wagonManager.getArtifact( artifact,
project.getRemoteArtifactRepositories() );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ getLog().debug( "Unable to resolve a project
dependency: " + artifact.getId(), e );
+
+ missingArtifacts.add( artifact );
+ }
+ catch ( TransferFailedException e )
+ {
+ getLog().debug( "Unable to resolve a project
dependency: " + artifact.getId(), e );
+
+ missingArtifacts.add( artifact );
+ }
+ }
+ }
+
+ if ( missingArtifacts.size() > 0 )
+ {
+ StringBuffer warnMsg = new StringBuffer();
+
+ warnMsg.append( "The following artifacts failed to
resolve\n\n" );
+
+ for( Iterator artifacts = missingArtifacts.iterator();
artifacts.hasNext(); )
+ {
+ Artifact artifact = (Artifact) artifacts.next();
+
+ warnMsg.append( " " + artifact.getId() + "\n" );
+ }
+
+ warnMsg.append( "\nfor the project " + project.getId() + "\n"
);
+
+ getLog().warn( warnMsg );
+ }
+ }
+ }
+
/**
* Create IDEA workspace (.iws) file.
*
@@ -1070,5 +1172,39 @@
public void setProject( MavenProject project )
{
this.project = project;
+ }
+
+ private Map createManagedVersionMap( String projectId,
DependencyManagement dependencyManagement )
+ throws ProjectBuildingException
+ {
+ Map map;
+ if ( dependencyManagement != null &&
dependencyManagement.getDependencies() != null )
+ {
+ map = new HashMap();
+ for ( Iterator i =
dependencyManagement.getDependencies().iterator(); i.hasNext(); )
+ {
+ Dependency d = (Dependency) i.next();
+
+ try
+ {
+ VersionRange versionRange =
VersionRange.createFromVersionSpec( d.getVersion() );
+ Artifact artifact =
artifactFactory.createDependencyArtifact( d.getGroupId(), d.getArtifactId(),
+
versionRange, d.getType(),
+
d.getClassifier(), d.getScope(),
+
d.isOptional() );
+ map.put( d.getManagementKey(), artifact );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new ProjectBuildingException( projectId, "Unable to
parse version '" + d.getVersion() +
+ "' for dependency '" + d.getManagementKey() + "': " +
e.getMessage(), e );
+ }
+ }
+ }
+ else
+ {
+ map = Collections.EMPTY_MAP;
+ }
+ return map;
}
}