You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2013/06/16 16:33:52 UTC
svn commit: r1493515 - in /maven/enforcer/trunk: ./
enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/
enforcer-rules/src/site/apt/
enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/
Author: rfscholte
Date: Sun Jun 16 14:33:52 2013
New Revision: 1493515
URL: http://svn.apache.org/r1493515
Log:
[MENFORCER-155] Add rule RequirePrerequisites
Added:
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePrerequisite.java
maven/enforcer/trunk/enforcer-rules/src/site/apt/requirePrerequisites.apt.vm
maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequirePrerequisiteTest.java
Modified:
maven/enforcer/trunk/enforcer-rules/src/site/apt/index.apt
maven/enforcer/trunk/pom.xml
Added: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePrerequisite.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePrerequisite.java?rev=1493515&view=auto
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePrerequisite.java (added)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePrerequisite.java Sun Jun 16 14:33:52 2013
@@ -0,0 +1,92 @@
+package org.apache.maven.plugins.enforcer;
+
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+import org.apache.maven.model.Prerequisites;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+
+/**
+ *
+ * @author Robert Scholte
+ * @since 1.3
+ */
+public class RequirePrerequisite extends AbstractNonCacheableEnforcerRule
+{
+ /**
+ * Can either be version or a range, e.g. {@code 2.2.1} or {@code [2.2.1,)}
+ */
+ private String mavenVersion;
+
+ public void setMavenVersion( String mavenVersion )
+ {
+ this.mavenVersion = mavenVersion;
+ }
+
+ public void execute( EnforcerRuleHelper helper )
+ throws EnforcerRuleException
+ {
+ try
+ {
+ MavenProject project = (MavenProject) helper.evaluate( "${project}" );
+
+ Prerequisites prerequisites = project.getPrerequisites();
+
+ if( prerequisites == null )
+ {
+ throw new EnforcerRuleException( "Requires prerequisite not set" );
+ }
+
+ if( mavenVersion != null )
+ {
+
+ VersionRange requiredVersionRange = VersionRange.createFromVersionSpec( mavenVersion );
+
+ if( !requiredVersionRange.hasRestrictions() )
+ {
+ requiredVersionRange = VersionRange.createFromVersionSpec( "[" + mavenVersion + ",)" );
+ }
+
+ VersionRange specifiedVersion = VersionRange.createFromVersionSpec( prerequisites.getMaven() );
+
+ VersionRange restrictedVersionRange = requiredVersionRange.restrict( specifiedVersion );
+
+ if ( restrictedVersionRange.getRecommendedVersion() == null )
+ {
+ throw new EnforcerRuleException( "The specified Maven prerequisite( " + specifiedVersion + " ) doesn't match the required version: " + mavenVersion );
+ }
+ }
+ }
+ catch ( ExpressionEvaluationException e )
+ {
+ throw new EnforcerRuleException( e.getMessage(), e );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new EnforcerRuleException( e.getMessage(), e );
+ }
+ }
+
+}
Modified: maven/enforcer/trunk/enforcer-rules/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/site/apt/index.apt?rev=1493515&r1=1493514&r2=1493515&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/site/apt/index.apt (original)
+++ maven/enforcer/trunk/enforcer-rules/src/site/apt/index.apt Sun Jun 16 14:33:52 2013
@@ -61,6 +61,8 @@ Standard Rules
* {{{./requirePluginVersions.html}requirePluginVersions}} - enforces that all plugins have a specified version.
+ * {{{./requirePrerequisites.html}requirePrerequisites}} - enforces that prerequisites have been specified.
+
* {{{./requireProperty.html}requireProperty}} - enforces the existence and values of properties.
* {{{./requireReleaseDeps.html}requireReleaseDeps}} - enforces that no snapshots are included as dependencies.
Added: maven/enforcer/trunk/enforcer-rules/src/site/apt/requirePrerequisites.apt.vm
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/site/apt/requirePrerequisites.apt.vm?rev=1493515&view=auto
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/site/apt/requirePrerequisites.apt.vm (added)
+++ maven/enforcer/trunk/enforcer-rules/src/site/apt/requirePrerequisites.apt.vm Sun Jun 16 14:33:52 2013
@@ -0,0 +1,74 @@
+ ~~ Licensed to the Apache Software Foundation (ASF) under one
+ ~~ or more contributor license agreements. See the NOTICE file
+ ~~ distributed with this work for additional information
+ ~~ regarding copyright ownership. The ASF licenses this file
+ ~~ to you under the Apache License, Version 2.0 (the
+ ~~ "License"); you may not use this file except in compliance
+ ~~ with the License. You may obtain a copy of the License at
+ ~~
+ ~~ http://www.apache.org/licenses/LICENSE-2.0
+ ~~
+ ~~ Unless required by applicable law or agreed to in writing,
+ ~~ software distributed under the License is distributed on an
+ ~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~~ KIND, either express or implied. See the License for the
+ ~~ specific language governing permissions and limitations
+ ~~ under the License.
+
+ -----
+ Require Same Version
+ -----
+ Robert Scholte
+ -----
+ 2013-06-16
+ -----
+
+ Require Prerequisites
+
+ This rule enforces that the prerequisite is specified since it is not inherited from its parent.
+ Defining the prerequisites is especially useful for plugins to enforce at least a certain version of Maven.
+
+
+ The following parameters are supported by this rule:
+
+ * mavenVersion - an optional value contain a versionrange or the version at least required.
+
+ []
+
+
+ Sample 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-prerequisites</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requirePrerequisites>
+ <mavenVersion>2.2.1</mavenVersion>
+ </requirePrerequisites>
+ <!-- same rule, different notation -->
+ <requirePrerequisites>
+ <mavenVersion>[2.2.1,)</mavenVersion>
+ </requirePrerequisites>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ [...]
+</project>
++---+
\ No newline at end of file
Added: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequirePrerequisiteTest.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequirePrerequisiteTest.java?rev=1493515&view=auto
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequirePrerequisiteTest.java (added)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/RequirePrerequisiteTest.java Sun Jun 16 14:33:52 2013
@@ -0,0 +1,110 @@
+package org.apache.maven.plugins.enforcer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.mockito.Mockito.*;
+
+import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+import org.apache.maven.model.Prerequisites;
+import org.apache.maven.project.MavenProject;
+import org.junit.Test;
+
+public class RequirePrerequisiteTest
+{
+ @Test( expected = EnforcerRuleException.class )
+ public void testNoPrerequisite()
+ throws Exception
+ {
+ RequirePrerequisite rule = new RequirePrerequisite();
+
+ MavenProject project = mock( MavenProject.class );
+
+ EnforcerRuleHelper helper = mock( EnforcerRuleHelper.class );
+ when( helper.evaluate( "${project}" ) ).thenReturn( project );
+
+ rule.execute( helper );
+ }
+
+ @Test
+ public void testNoSpecifiedPrerequisite()
+ throws Exception
+ {
+ RequirePrerequisite rule = new RequirePrerequisite();
+
+ MavenProject project = mock( MavenProject.class );
+ when( project.getPrerequisites() ).thenReturn( new Prerequisites() );
+
+ EnforcerRuleHelper helper = mock( EnforcerRuleHelper.class );
+ when( helper.evaluate( "${project}" ) ).thenReturn( project );
+
+ rule.execute( helper );
+ }
+
+ @Test( expected = EnforcerRuleException.class )
+ public void testLowerMavenPrerequisite()
+ throws Exception
+ {
+ RequirePrerequisite rule = new RequirePrerequisite();
+ rule.setMavenVersion( "3.0" );
+
+ MavenProject project = mock( MavenProject.class );
+ when( project.getPrerequisites() ).thenReturn( new Prerequisites() );
+
+ EnforcerRuleHelper helper = mock( EnforcerRuleHelper.class );
+ when( helper.evaluate( "${project}" ) ).thenReturn( project );
+
+ rule.execute( helper );
+ }
+
+ @Test( expected = EnforcerRuleException.class )
+ public void testLowerMavenRangePrerequisite()
+ throws Exception
+ {
+ RequirePrerequisite rule = new RequirePrerequisite();
+ rule.setMavenVersion( "[3.0,)" );
+
+ MavenProject project = mock( MavenProject.class );
+ when( project.getPrerequisites() ).thenReturn( new Prerequisites() );
+
+ EnforcerRuleHelper helper = mock( EnforcerRuleHelper.class );
+ when( helper.evaluate( "${project}" ) ).thenReturn( project );
+
+ rule.execute( helper );
+ }
+
+ @Test
+ public void testValidPrerequisite()
+ throws Exception
+ {
+ RequirePrerequisite rule = new RequirePrerequisite();
+ rule.setMavenVersion( "2.2.1" );
+
+ MavenProject project = mock( MavenProject.class );
+ Prerequisites prerequisites = new Prerequisites();
+ prerequisites.setMaven( "3.0" );
+ when( project.getPrerequisites() ).thenReturn( prerequisites );
+
+ EnforcerRuleHelper helper = mock( EnforcerRuleHelper.class );
+ when( helper.evaluate( "${project}" ) ).thenReturn( project );
+
+ rule.execute( helper );
+ }
+}
Modified: maven/enforcer/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/pom.xml?rev=1493515&r1=1493514&r2=1493515&view=diff
==============================================================================
--- maven/enforcer/trunk/pom.xml (original)
+++ maven/enforcer/trunk/pom.xml Sun Jun 16 14:33:52 2013
@@ -197,7 +197,7 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>3.8.2</version>
+ <version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>