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() : "" );
     }
 }


Reply via email to