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>