You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by pg...@apache.org on 2010/08/26 18:52:46 UTC

svn commit: r989820 - in /maven/enforcer/trunk: ./ enforcer-rules/ enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/ enforcer-rules/src/site/apt/ maven-enforcer-plugin/src/it/require-release-dependencies-excludes/

Author: pgier
Date: Thu Aug 26 16:52:46 2010
New Revision: 989820

URL: http://svn.apache.org/viewvc?rev=989820&view=rev
Log:
[MENFORCER-85] Allow includes/excludes when banning snapshot dependencies.

Added:
    maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/
    maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/goals.txt
    maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/pom.xml
Modified:
    maven/enforcer/trunk/enforcer-rules/pom.xml
    maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java
    maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt.vm
    maven/enforcer/trunk/pom.xml

Modified: maven/enforcer/trunk/enforcer-rules/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/pom.xml?rev=989820&r1=989819&r2=989820&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/pom.xml (original)
+++ maven/enforcer/trunk/enforcer-rules/pom.xml Thu Aug 26 16:52:46 2010
@@ -52,6 +52,10 @@
       <artifactId>maven-core</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-common-artifact-filters</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
     </dependency>

Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java?rev=989820&r1=989819&r2=989820&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java Thu Aug 26 16:52:46 2010
@@ -21,13 +21,17 @@ package org.apache.maven.plugins.enforce
 
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.artifact.filter.StrictPatternExcludesArtifactFilter;
+import org.apache.maven.shared.artifact.filter.StrictPatternIncludesArtifactFilter;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
 
 /**
@@ -55,6 +59,18 @@ public class RequireReleaseDeps
     public boolean failWhenParentIsSnapshot = true;
 
     /**
+     * Dependencies to ignore when checking for release versions.  For example, inter-module dependencies 
+     * can be excluded from the check and therefore allowed to contain snapshot versions.
+     */
+    public List excludes = null;
+
+    /**
+     * Dependencies to include when checking for release versions.  If any of the included dependencies
+     * have snapshot versions, the rule will fail.
+     */
+    public List includes = null;
+
+    /**
      * Override parent to allow optional ignore of this rule.
      */
     public void execute( EnforcerRuleHelper helper )
@@ -121,20 +137,59 @@ public class RequireReleaseDeps
     protected Set checkDependencies( Set dependencies, Log log )
         throws EnforcerRuleException
     {
-        Set foundExcludes = new HashSet();
+        Set foundSnapshots = new HashSet();
 
-        Iterator DependencyIter = dependencies.iterator();
+        Set filteredDependencies = this.filterArtifacts( dependencies );
+        
+        Iterator DependencyIter = filteredDependencies.iterator();
         while ( DependencyIter.hasNext() )
         {
             Artifact artifact = (Artifact) DependencyIter.next();
 
             if ( artifact.isSnapshot() )
             {
-                foundExcludes.add( artifact );
+                foundSnapshots.add( artifact );
             }
         }
 
-        return foundExcludes;
+        return foundSnapshots;
+    }
+    
+    /*
+     * Filter the dependency artifacts according to the includes and excludes
+     * If includes and excludes are both null, the original set is returned.
+     * 
+     * @param dependencies the list of dependencies to filter
+     * @return the resulting set of dependencies
+     */
+    public Set filterArtifacts( Set dependencies )
+    {
+        if ( includes == null && excludes == null )
+        {
+            return dependencies;
+        }
+        
+        AndArtifactFilter filter = new AndArtifactFilter( );
+        if ( includes != null )
+        {
+            filter.add( new StrictPatternIncludesArtifactFilter( includes ) );
+        }
+        if ( excludes != null )
+        {
+            filter.add( new StrictPatternExcludesArtifactFilter( excludes ) );
+        }
+        
+        Set result = new HashSet();
+        Iterator iter = dependencies.iterator();
+        while ( iter.hasNext() )
+        {
+            Artifact artifact = (Artifact) iter.next();
+            if ( filter.include( artifact ) )
+            {
+                result.add( artifact );
+            }
+        }
+        return result;
     }
 
     public boolean isOnlyWhenRelease()

Modified: maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt.vm
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt.vm?rev=989820&r1=989819&r2=989820&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt.vm (original)
+++ maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt.vm Thu Aug 26 16:52:46 2010
@@ -37,6 +37,10 @@ Require Release Dependencies
    * onlyWhenRelease - if this rule should only be executed when the version is a non-SNAPSHOT version. Default: false
    
    * failWhenParentIsSnapshot - if the parent should be checked. Default: true 
+   
+   * includes - List of dependency patterns to include when checking for snapshot versions
+   
+   * excludes - List of dependency patterns to exclude when checking for snapshot versions
 
    []
 
@@ -75,3 +79,41 @@ Require Release Dependencies
 </project>
 +---+
 
+  Includes/Excludes Plugin Configuration:
+  
++---+
+<project>
+  [...]
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>${project.version}</version>
+        <executions>
+          <execution>
+            <id>enforce-no-snapshots</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireReleaseDeps>
+                  <message>No Snapshots Allowed!</message>
+                  <excludes>
+                    <exclude>org.apache.maven:maven-core</exclude>
+                    <exclude>org.apache.maven.plugins:*</exclude>
+                  </excludes>
+                </requireReleaseDeps>
+              </rules>
+              <fail>true</fail>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  [...]
+</project>
++---+
+

Added: maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/goals.txt
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/goals.txt?rev=989820&view=auto
==============================================================================
--- maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/goals.txt (added)
+++ maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/goals.txt Thu Aug 26 16:52:46 2010
@@ -0,0 +1 @@
+validate
\ No newline at end of file

Added: maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/pom.xml?rev=989820&view=auto
==============================================================================
--- maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/pom.xml (added)
+++ maven/enforcer/trunk/maven-enforcer-plugin/src/it/require-release-dependencies-excludes/pom.xml Thu Aug 26 16:52:46 2010
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+  
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.enforcer.its</groupId>
+  <artifactId>requireReleaseDeps</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>@project.version@</version>
+        <executions>
+          <execution>
+            <id>enforce</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireReleaseDeps>
+                  <message>No Snapshots Allowed!</message>
+                  <excludes>
+                    <exclude>org.apache.maven.enforcer:enforcer-api</exclude>
+                  </excludes>
+                </requireReleaseDeps>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven.enforcer</groupId>
+      <artifactId>enforcer-api</artifactId>
+      <version>@project.version@</version>
+    </dependency>
+  </dependencies>
+ </project>
\ No newline at end of file

Modified: maven/enforcer/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/pom.xml?rev=989820&r1=989819&r2=989820&view=diff
==============================================================================
--- maven/enforcer/trunk/pom.xml (original)
+++ maven/enforcer/trunk/pom.xml Thu Aug 26 16:52:46 2010
@@ -193,6 +193,11 @@
         <version>${maven.version}</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.maven.shared</groupId>
+        <artifactId>maven-common-artifact-filters</artifactId>
+        <version>1.2</version>
+      </dependency>
+      <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-utils</artifactId>
         <version>1.5.8</version>