Author: brianf Date: Fri Mar 16 22:03:28 2007 New Revision: 519239 URL: http://svn.apache.org/viewvc?view=rev&rev=519239 Log: added check for MNG-1577 issues
Modified: maven/plugins/branches/maven-dependency-plugin-w-analyzer/pom.xml maven/plugins/branches/maven-dependency-plugin-w-analyzer/src/main/java/org/apache/maven/plugin/dependency/AnalyzeMojo.java Modified: maven/plugins/branches/maven-dependency-plugin-w-analyzer/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-dependency-plugin-w-analyzer/pom.xml?view=diff&rev=519239&r1=519238&r2=519239 ============================================================================== --- maven/plugins/branches/maven-dependency-plugin-w-analyzer/pom.xml (original) +++ maven/plugins/branches/maven-dependency-plugin-w-analyzer/pom.xml Fri Mar 16 22:03:28 2007 @@ -28,7 +28,7 @@ <artifactId>maven-dependency-plugin</artifactId> <packaging>maven-plugin</packaging> <name>Maven Dependency Plugin</name> - <version>2.0-alpha-3-analyzer-SNAPSHOT</version> + <version>2.0-alpha-3-SNAPSHOT</version> <prerequisites> <maven>2.0.3</maven> </prerequisites> @@ -168,7 +168,7 @@ <dependency> <groupId>org.apache.maven.shared</groupId> <artifactId>maven-dependency-analyzer</artifactId> - <version>1.0-SNAPSHOT</version> + <version>1.0-alpha-1-SNAPSHOT</version> </dependency> </dependencies> <!--reporting> Modified: maven/plugins/branches/maven-dependency-plugin-w-analyzer/src/main/java/org/apache/maven/plugin/dependency/AnalyzeMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/branches/maven-dependency-plugin-w-analyzer/src/main/java/org/apache/maven/plugin/dependency/AnalyzeMojo.java?view=diff&rev=519239&r1=519238&r2=519239 ============================================================================== --- maven/plugins/branches/maven-dependency-plugin-w-analyzer/src/main/java/org/apache/maven/plugin/dependency/AnalyzeMojo.java (original) +++ maven/plugins/branches/maven-dependency-plugin-w-analyzer/src/main/java/org/apache/maven/plugin/dependency/AnalyzeMojo.java Fri Mar 16 22:03:28 2007 @@ -19,10 +19,17 @@ * under the License. */ +import java.util.HashMap; import java.util.Iterator; +import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.versioning.ArtifactVersion; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.DependencyManagement; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -30,6 +37,7 @@ import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalysis; import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzer; import org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzerException; +import org.codehaus.plexus.util.StringUtils; /** * @@ -38,10 +46,11 @@ * @version $Id$ * @goal analyze * @requiresDependencyResolution test - * @execute phase="test-compile" + * * @since 2.0-alpha-3 */ -public class AnalyzeMojo extends AbstractMojo +public class AnalyzeMojo + extends AbstractMojo { // fields ----------------------------------------------------------------- @@ -55,6 +64,27 @@ private MavenProject project; /** + * Check for dependency / dependencyMgt conflicts + * + * @parameter expression=${mdep.checkDepMgt} + */ + private boolean checkDependencyMgt = true; + + /** + * Check dependency conflicts + * + * @parameter expression=${mdep.checkDependencies} + */ + private boolean checkDependencies = false; + + /** + * Fail Build on problem + * + * @parameter expression=${mdep.failBuild} + */ + private boolean failBuild = false; + + /** * * * @parameter expression="${component.org.apache.maven.shared.dependency.analyzer.ProjectDependencyAnalyzer}" @@ -68,7 +98,30 @@ /* * @see org.apache.maven.plugin.Mojo#execute() */ - public void execute() throws MojoExecutionException, MojoFailureException + public void execute() + throws MojoExecutionException, MojoFailureException + { + boolean result = false; + if ( this.checkDependencies ) + { + checkDependencies(); + } + + if ( this.checkDependencyMgt ) + { + result = checkDependencyManagement(); + } + + if ( result && this.failBuild ) + { + throw new MojoExecutionException( "Found errors." ); + } + } + + // private methods -------------------------------------------------------- + + private void checkDependencies() + throws MojoExecutionException { try { @@ -90,9 +143,70 @@ { throw new MojoExecutionException( "Cannot analyze dependencies", exception ); } + } - // private methods -------------------------------------------------------- + private boolean checkDependencyManagement() + throws MojoExecutionException + { + boolean foundMismatch = false; + + getLog().info( "Found Resolved Dependency / DependencyManagement mismatches:" ); + + List depMgtDependencies = null; + DependencyManagement depMgt = project.getDependencyManagement(); + if ( depMgt != null ) + { + depMgtDependencies = depMgt.getDependencies(); + } + + if ( depMgtDependencies != null && !depMgtDependencies.isEmpty() ) + { + // put all the dependencies from depMgt into a map for quick lookup + Map map = new HashMap(); + Iterator iter = depMgtDependencies.iterator(); + while ( iter.hasNext() ) + { + Dependency dependency = (Dependency) iter.next(); + map.put( dependency.getManagementKey(), dependency ); + } + + Set allDependencies = project.getArtifacts(); + iter = allDependencies.iterator(); + while ( iter.hasNext() ) + { + Artifact artifact = (Artifact) iter.next(); + // getLog().info( "a:"+getArtifactManagementKey( artifact ) ); + // see if this artifact matches anything in the dependencyMgt + // list + Dependency dep = (Dependency) map.get( getArtifactManagementKey( artifact ) ); + if ( dep != null ) + { + // getLog().info( "Compare:" + dep.getManagementKey()+" v:"+dep.getVersion()+"a:"+artifact.getVersion()); + // ArtifactVersion depVersion = new DefaultArtifactVersion(dep.getVersion()); + ArtifactVersion artifactVersion = new DefaultArtifactVersion(artifact.getVersion()); + + if (!artifact.isSnapshot() && !dep.getVersion().equals( artifact.getVersion() ) ) + + { + logMismatch( artifact, dep ); + foundMismatch = true; + } + } + } + } + else + { + getLog().info( " Nothing in DepMgt." ); + } + + if ( !foundMismatch ) + { + getLog().info( " None" ); + } + + return foundMismatch; + } private void logArtifacts( Set artifacts ) { @@ -109,5 +223,24 @@ getLog().info( " " + artifact ); } } + } + + private void logMismatch( Artifact artifact, Dependency dependency ) + throws MojoExecutionException + { + if ( artifact == null || dependency == null ) + { + throw new MojoExecutionException( "Invalid params: Artifact:" + artifact + " Dependency:" + dependency ); + } + + getLog().info( + " Resolved Dependency: " + dependency.getManagementKey() +":"+dependency.getVersion()+ " Dependency Management: " + + getArtifactManagementKey( artifact )+":"+artifact.getVersion() ); + } + + private String getArtifactManagementKey( Artifact artifact ) + { + return artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getType() + + ( !StringUtils.isEmpty( artifact.getClassifier() ) ? ":" + artifact.getClassifier() : "" ); } }