You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2023/01/12 21:41:40 UTC

[maven-enforcer] branch MENFORCER-458-version created (now 866c79a)

This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a change to branch MENFORCER-458-version
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git


      at 866c79a  [MENFORCER-458] Move Require Java, Maven Version to new API

This branch includes the following new commits:

     new 866c79a  [MENFORCER-458] Move Require Java, Maven Version to new API

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-enforcer] 01/01: [MENFORCER-458] Move Require Java, Maven Version to new API

Posted by sj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch MENFORCER-458-version
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git

commit 866c79a8b200429b05a05faf64001b64e1bb1b16
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Thu Jan 12 22:08:00 2023 +0100

    [MENFORCER-458] Move Require Java, Maven Version to new API
---
 .../enforcer/rules/utils/ArtifactMatcher.java      |  24 +++-
 .../rules/version}/AbstractVersionEnforcer.java    |  57 +++-----
 .../rules/version}/RequireJavaVersion.java         |  27 ++--
 .../rules/version/RequireMavenVersion.java         |  55 ++++++++
 .../plugins/enforcer/RequireMavenVersion.java      |  49 -------
 .../src/site/apt/requireJavaVersion.apt.vm         |  12 +-
 .../src/site/apt/requireMavenVersion.apt.vm        |   4 +-
 .../enforcer/rules/utils/TestArtifactMatcher.java  |  55 +++++++-
 .../rules/version/TestAbstractVersionEnforcer.java |  92 +++++++++++++
 .../rules/version}/TestMavenVersion.java           |  73 +++++-----
 .../rules/version}/TestRequireJavaVersion.java     |  36 +++--
 .../enforcer/TestAbstractVersionEnforcer.java      | 148 ---------------------
 .../it/projects/require-java-version/verify.groovy |  23 ++++
 .../projects/require-maven-version/verify.groovy   |  23 ++++
 .../maven/plugins/enforcer/DisplayInfoMojo.java    |   1 +
 15 files changed, 363 insertions(+), 316 deletions(-)

diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/utils/ArtifactMatcher.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/utils/ArtifactMatcher.java
index 8e20d1b..83fb00c 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/utils/ArtifactMatcher.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/utils/ArtifactMatcher.java
@@ -24,11 +24,11 @@ import java.util.Objects;
 import java.util.function.Function;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Dependency;
-import org.apache.maven.plugins.enforcer.AbstractVersionEnforcer;
 import org.codehaus.plexus.util.StringUtils;
 
 import static java.util.Optional.ofNullable;
@@ -126,7 +126,7 @@ public final class ArtifactMatcher {
 
                 case 3:
                     if (!matches(parts[2], version)) {
-                        if (!AbstractVersionEnforcer.containsVersion(
+                        if (!containsVersion(
                                 VersionRange.createFromVersionSpec(parts[2]), new DefaultArtifactVersion(version))) {
                             return false;
                         }
@@ -216,4 +216,24 @@ public final class ArtifactMatcher {
     public boolean match(Dependency dependency) {
         return match(p -> p.match(dependency));
     }
+
+    /**
+     * Copied from Artifact.VersionRange. This is tweaked to handle singular ranges properly. Currently the default
+     * containsVersion method assumes a singular version means allow everything. This method assumes that "2.0.4" ==
+     * "[2.0.4,)"
+     *
+     * @param allowedRange range of allowed versions.
+     * @param theVersion   the version to be checked.
+     * @return true if the version is contained by the range.
+     */
+    public static boolean containsVersion(VersionRange allowedRange, ArtifactVersion theVersion) {
+        ArtifactVersion recommendedVersion = allowedRange.getRecommendedVersion();
+        if (recommendedVersion == null) {
+            return allowedRange.containsVersion(theVersion);
+        } else {
+            // only singular versions ever have a recommendedVersion
+            int compareTo = recommendedVersion.compareTo(theVersion);
+            return (compareTo <= 0);
+        }
+    }
 }
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/version/AbstractVersionEnforcer.java
similarity index 70%
rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
rename to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/version/AbstractVersionEnforcer.java
index 4e1bf62..bbae8ea 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/version/AbstractVersionEnforcer.java
@@ -16,22 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.maven.plugins.enforcer;
+package org.apache.maven.enforcer.rules.version;
 
 import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.enforcer.rule.api.EnforcerRule;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule;
 import org.codehaus.plexus.util.StringUtils;
 
+import static org.apache.maven.enforcer.rules.utils.ArtifactMatcher.containsVersion;
+
 /**
  * Contains the common code to compare a version against a version range.
  *
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
  */
-public abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRule {
+abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRule {
 
     /**
      * Specify the required version. Some examples are:
@@ -51,14 +52,13 @@ public abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRu
     /**
      * Compares the specified version to see if it is allowed by the defined version range.
      *
-     * @param log the log
-     * @param variableName name of variable to use in messages (Example: "Maven" or "Java" etc).
+     * @param variableName         name of variable to use in messages (Example: "Maven" or "Java" etc).
      * @param requiredVersionRange range of allowed versions.
-     * @param actualVersion the version to be checked.
+     * @param actualVersion        the version to be checked.
      * @throws EnforcerRuleException the enforcer rule exception
      */
     // CHECKSTYLE_OFF: LineLength
-    public void enforceVersion(Log log, String variableName, String requiredVersionRange, ArtifactVersion actualVersion)
+    public void enforceVersion(String variableName, String requiredVersionRange, ArtifactVersion actualVersion)
             throws EnforcerRuleException
                 // CHECKSTYLE_ON: LineLength
             {
@@ -71,13 +71,13 @@ public abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRu
 
             // short circuit check if the strings are exactly equal
             if (actualVersion.toString().equals(requiredVersionRange)) {
-                log.debug(msg + " is allowed in the range " + requiredVersionRange + ".");
+                getLog().debug(msg + " is allowed in the range " + requiredVersionRange + ".");
             } else {
                 try {
                     vr = VersionRange.createFromVersionSpec(requiredVersionRange);
 
                     if (containsVersion(vr, actualVersion)) {
-                        log.debug(msg + " is allowed in the range " + toString(vr) + ".");
+                        getLog().debug(msg + " is allowed in the range " + toString(vr) + ".");
                     } else {
                         String message = getMessage();
 
@@ -103,25 +103,6 @@ public abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRu
             return vr.toString();
         }
     }
-    /**
-     * Copied from Artifact.VersionRange. This is tweaked to handle singular ranges properly. Currently the default
-     * containsVersion method assumes a singular version means allow everything. This method assumes that "2.0.4" ==
-     * "[2.0.4,)"
-     *
-     * @param allowedRange range of allowed versions.
-     * @param theVersion the version to be checked.
-     * @return true if the version is contained by the range.
-     */
-    public static boolean containsVersion(VersionRange allowedRange, ArtifactVersion theVersion) {
-        ArtifactVersion recommendedVersion = allowedRange.getRecommendedVersion();
-        if (recommendedVersion == null) {
-            return allowedRange.containsVersion(theVersion);
-        } else {
-            // only singular versions ever have a recommendedVersion
-            int compareTo = recommendedVersion.compareTo(theVersion);
-            return (compareTo <= 0);
-        }
-    }
 
     @Override
     public String getCacheId() {
@@ -133,19 +114,6 @@ public abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRu
         }
     }
 
-    @Override
-    public boolean isCacheable() {
-        // the maven version is not going to change between projects in the same build.
-        return true;
-    }
-
-    @Override
-    public boolean isResultValid(EnforcerRule theCachedRule) {
-        // i will always return the hash of the parameters as my id. If my parameters are the same, this
-        // rule must always have the same result.
-        return true;
-    }
-
     /**
      * Gets the required version.
      *
@@ -170,4 +138,9 @@ public abstract class AbstractVersionEnforcer extends AbstractStandardEnforcerRu
     public void setVersion(String theVersion) {
         this.version = theVersion;
     }
+
+    @Override
+    public String toString() {
+        return String.format("%s[version=%s]", getClass().getSimpleName(), version);
+    }
 }
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/version/RequireJavaVersion.java
similarity index 83%
rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java
rename to enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/version/RequireJavaVersion.java
index 39b1733..ad44406 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/version/RequireJavaVersion.java
@@ -16,7 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.maven.plugins.enforcer;
+package org.apache.maven.enforcer.rules.version;
+
+import javax.inject.Named;
 
 import java.util.Arrays;
 import java.util.Iterator;
@@ -30,8 +32,6 @@ import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 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.plugin.logging.Log;
 import org.codehaus.plexus.util.StringUtils;
 
 /**
@@ -39,7 +39,8 @@ import org.codehaus.plexus.util.StringUtils;
  *
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
  */
-public class RequireJavaVersion extends AbstractVersionEnforcer {
+@Named("requireJavaVersion")
+public final class RequireJavaVersion extends AbstractVersionEnforcer {
 
     private static final Pattern JDK8_VERSION_PATTERN = Pattern.compile("([\\[(,]?)(1\\.8|8)([]),]?)");
 
@@ -63,24 +64,23 @@ public class RequireJavaVersion extends AbstractVersionEnforcer {
     }
 
     @Override
-    public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
+    public void execute() throws EnforcerRuleException {
         String javaVersion = SystemUtils.JAVA_VERSION;
-        Log log = helper.getLog();
 
-        log.debug("Detected Java String: '" + javaVersion + "'");
+        getLog().debug("Detected Java String: '" + javaVersion + "'");
         javaVersion = normalizeJDKVersion(javaVersion);
-        log.debug("Normalized Java String: '" + javaVersion + "'");
+        getLog().debug("Normalized Java String: '" + javaVersion + "'");
 
         ArtifactVersion detectedJdkVersion = new DefaultArtifactVersion(javaVersion);
 
-        log.debug("Parsed Version: Major: " + detectedJdkVersion.getMajorVersion() + " Minor: "
+        getLog().debug("Parsed Version: Major: " + detectedJdkVersion.getMajorVersion() + " Minor: "
                 + detectedJdkVersion.getMinorVersion() + " Incremental: " + detectedJdkVersion.getIncrementalVersion()
                 + " Build: " + detectedJdkVersion.getBuildNumber() + " Qualifier: "
                 + detectedJdkVersion.getQualifier());
 
-        setCustomMessageIfNoneConfigured(detectedJdkVersion, getVersion(), log);
+        setCustomMessageIfNoneConfigured(detectedJdkVersion, getVersion());
 
-        enforceVersion(helper.getLog(), "JDK", getVersion(), detectedJdkVersion);
+        enforceVersion("JDK", getVersion(), detectedJdkVersion);
     }
 
     /**
@@ -117,15 +117,14 @@ public class RequireJavaVersion extends AbstractVersionEnforcer {
         return StringUtils.stripEnd(version, ".");
     }
 
-    private void setCustomMessageIfNoneConfigured(
-            ArtifactVersion detectedJdkVersion, String allowedVersionRange, Log log) {
+    private void setCustomMessageIfNoneConfigured(ArtifactVersion detectedJdkVersion, String allowedVersionRange) {
         if (getMessage() == null) {
             String version;
             try {
                 VersionRange vr = VersionRange.createFromVersionSpec(allowedVersionRange);
                 version = AbstractVersionEnforcer.toString(vr);
             } catch (InvalidVersionSpecificationException e) {
-                log.debug("Could not parse allowed version range " + allowedVersionRange, e);
+                getLog().debug("Could not parse allowed version range " + allowedVersionRange + " " + e.getMessage());
                 version = allowedVersionRange;
             }
             String message = String.format(
diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/version/RequireMavenVersion.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/version/RequireMavenVersion.java
new file mode 100644
index 0000000..4dfb9e8
--- /dev/null
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/version/RequireMavenVersion.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+package org.apache.maven.enforcer.rules.version;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import java.util.Objects;
+
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+import org.apache.maven.rtinfo.RuntimeInformation;
+
+/**
+ * This rule checks that the Maven version is allowed.
+ *
+ * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
+ */
+@Named("requireMavenVersion")
+public final class RequireMavenVersion extends AbstractVersionEnforcer {
+
+    private final RuntimeInformation runtimeInformation;
+
+    @Inject
+    public RequireMavenVersion(RuntimeInformation runtimeInformation) {
+        this.runtimeInformation = Objects.requireNonNull(runtimeInformation);
+    }
+
+    @Override
+    public void execute() throws EnforcerRuleException {
+        String mavenVersion = runtimeInformation.getMavenVersion();
+        getLog().debug("Detected Maven Version: " + mavenVersion);
+        if (mavenVersion == null) {
+            throw new EnforcerRuleException("Unable to detect Maven Version");
+        }
+        DefaultArtifactVersion detectedVersion = new DefaultArtifactVersion(mavenVersion);
+        enforceVersion("Maven", getVersion(), detectedVersion);
+    }
+}
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireMavenVersion.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireMavenVersion.java
deleted file mode 100644
index b42875a..0000000
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireMavenVersion.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.
- */
-package org.apache.maven.plugins.enforcer;
-
-import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
-import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
-import org.apache.maven.execution.MavenSession;
-import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
-
-/**
- * This rule checks that the Maven version is allowed.
- *
- * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
- */
-public class RequireMavenVersion extends AbstractVersionEnforcer {
-    @Override
-    public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
-        try {
-            MavenSession mavenSession = (MavenSession) helper.evaluate("${session}");
-            String mavenVersion = mavenSession.getSystemProperties().getProperty("maven.version");
-            helper.getLog().debug("Detected Maven Version: " + mavenVersion);
-            if (mavenVersion == null) {
-                throw new EnforcerRuleException(
-                        "Unable to detect Maven Version - missing system property - maven.version");
-            }
-            DefaultArtifactVersion detectedVersion = new DefaultArtifactVersion(mavenVersion);
-            enforceVersion(helper.getLog(), "Maven", getVersion(), detectedVersion);
-        } catch (ExpressionEvaluationException e) {
-            throw new EnforcerRuleException("Unable to retrieve the session.", e);
-        }
-    }
-}
diff --git a/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm b/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
index 9b32b51..39cd978 100644
--- a/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
+++ b/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
@@ -29,9 +29,9 @@ Require Java Version
 
    The following parameters are supported by this rule:
    
-   * message - an optional message to the user if the rule fails.
+   * <<message>> - an optional message to the user if the rule fails.
    
-   * {{{../apidocs/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.html#version}version}} - {{{./versionRanges.html}range}} of allowed JDKs.
+   * <<version>> - {{{./versionRanges.html}range}} of allowed JDKs.
 
    For JDK 1.8 you can also use simple <<<8>>> as <version> - it will be internally changed to <<<1.8>>>
    
@@ -55,10 +55,10 @@ Require Java Version
 +---+
 mvn enforcer:display-info
 ...
-[enforcer:display-info]
-Maven Version: 2.0.8
-JDK Version: 1.5.0_11 normalized as: 1.5.0-11
-OS Info: Arch: x86 Family: windows Name: windows xp Version: 5.1
+[INFO] Maven Version: 3.8.7
+[INFO] JDK Version: 1.8.0_352 normalized as: 1.8.0-352
+[INFO] Java Vendor: Homebrew
+[INFO] OS Info - Arch: x86_64, Family: mac, Name: mac os x, Version: 12.6.1
 +---+
  
    Sample Plugin Configuration:
diff --git a/enforcer-rules/src/site/apt/requireMavenVersion.apt.vm b/enforcer-rules/src/site/apt/requireMavenVersion.apt.vm
index 268f2bd..bb17a2f 100644
--- a/enforcer-rules/src/site/apt/requireMavenVersion.apt.vm
+++ b/enforcer-rules/src/site/apt/requireMavenVersion.apt.vm
@@ -29,9 +29,9 @@ Require Maven Version
 
    The following parameters are supported by this rule:
    
-   * message - an optional message to the user if the rule fails.
+   * <<message>> - an optional message to the user if the rule fails.
 
-   * {{{../enforcer-rules/apidocs/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.html#version}version}} - {{{./versionRanges.html}range}} of allowed Maven versions.
+   * <<version>> - {{{./versionRanges.html}range}} of allowed Maven versions.
    
    []
 
diff --git a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/utils/TestArtifactMatcher.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/utils/TestArtifactMatcher.java
index 4f67e43..8486e8a 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/utils/TestArtifactMatcher.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/utils/TestArtifactMatcher.java
@@ -25,22 +25,27 @@ import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.enforcer.rules.utils.ArtifactMatcher.Pattern;
+import org.apache.maven.enforcer.rules.version.RequireJavaVersion;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
-public class TestArtifactMatcher {
+class TestArtifactMatcher {
 
     Collection<String> patterns = new ArrayList<>();
 
     Collection<String> ignorePatterns = new ArrayList<>();
 
     @Test
-    public void testPatternInvalidInput() {
+    void testPatternInvalidInput() {
         try {
             new Pattern(null);
             fail("NullPointerException expected.");
@@ -68,7 +73,7 @@ public class TestArtifactMatcher {
     }
 
     @Test
-    public void testPattern() throws InvalidVersionSpecificationException {
+    void testPattern() throws InvalidVersionSpecificationException {
         executePatternMatch(
                 "groupId:artifactId:1.0:jar:compile", "groupId", "artifactId", "1.0", "compile", "jar", true);
 
@@ -100,7 +105,7 @@ public class TestArtifactMatcher {
     }
 
     @Test
-    public void testMatch() throws InvalidVersionSpecificationException {
+    void testMatch() {
         patterns.add("groupId:artifactId:1.0");
         patterns.add("*:anotherArtifact");
 
@@ -171,4 +176,46 @@ public class TestArtifactMatcher {
         VersionRange version = VersionRange.createFromVersion(versionRange);
         return new DefaultArtifact(groupId, artifactId, version, scope, type, classifier, artifactHandler);
     }
+
+    /**
+     * Test contains version.
+     *
+     * @throws InvalidVersionSpecificationException the invalid version specification exception
+     */
+    @Test
+    void testContainsVersion() throws InvalidVersionSpecificationException {
+        ArtifactVersion version = new DefaultArtifactVersion("2.0.5");
+        // test ranges
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.5,)"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,)"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.5]"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.6]"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.6)"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0,)"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.0,)"), version));
+        // not matching versions
+        assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.5)"), version));
+        assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.0.6,)"), version));
+        assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("(2.0.5,)"), version));
+
+        // test singular versions -> 2.0.5 == [2.0.5,) or x >= 2.0.5
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("2.0"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("2.0.4"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("2.0.5"), version));
+
+        assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("2.0.6"), version));
+
+        version = new DefaultArtifactVersion("1.5.0-7");
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[1.5.0,)"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[1.5,1.6)"), version));
+
+        version = new DefaultArtifactVersion(RequireJavaVersion.normalizeJDKVersion("1.5.0-07"));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[1.5.0,)"), version));
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[1.5,1.6)"), version));
+
+        // MENFORCER-50
+        version = new DefaultArtifactVersion("2.1.0-M1-RC12");
+        assertTrue(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.1.0-M1-RC12,)"), version));
+        assertFalse(ArtifactMatcher.containsVersion(VersionRange.createFromVersionSpec("[2.1.0-M1,)"), version));
+    }
 }
diff --git a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/version/TestAbstractVersionEnforcer.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/version/TestAbstractVersionEnforcer.java
new file mode 100644
index 0000000..0bfa859
--- /dev/null
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/version/TestAbstractVersionEnforcer.java
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+package org.apache.maven.enforcer.rules.version;
+
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.enforcer.rule.api.EnforcerLogger;
+import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.mockito.Mockito.mock;
+
+/**
+ * The Class TestAbstractVersionEnforcer.
+ *
+ * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
+ */
+class TestAbstractVersionEnforcer {
+
+    /**
+     * Enforce false.
+     *
+     * @param rule the rule
+     * @param var the var
+     * @param range the range
+     * @param version the version
+     */
+    private void enforceFalse(AbstractVersionEnforcer rule, String var, String range, ArtifactVersion version) {
+        try {
+            rule.enforceVersion(var, range, version);
+            fail("Expected to receive EnforcerRuleException because:" + version + " is not contained by " + range);
+        } catch (Exception e) {
+            if (e instanceof EnforcerRuleException) {
+                // log.info( "Caught Expected Exception: " +
+                // e.getLocalizedMessage() );
+            } else {
+                fail("Received wrong exception. Expected EnforcerRuleExeption. Received:" + e);
+            }
+        }
+    }
+
+    /**
+     * Test enforce version.
+     */
+    @Test
+    void testEnforceVersion() throws Exception {
+        RequireJavaVersion rule = new RequireJavaVersion();
+        rule.setLog(mock(EnforcerLogger.class));
+
+        ArtifactVersion version = new DefaultArtifactVersion("2.0.5");
+
+        // test ranges
+        rule.enforceVersion("test", "[2.0.5,)", version);
+        rule.enforceVersion("test", "[2.0.4,)", version);
+        rule.enforceVersion("test", "[2.0.4,2.0.5]", version);
+        rule.enforceVersion("test", "[2.0.4,2.0.6]", version);
+        rule.enforceVersion("test", "[2.0.4,2.0.6)", version);
+        rule.enforceVersion("test", "[2.0,)", version);
+        rule.enforceVersion("test", "[2.0.0,)", version);
+
+        // test singular versions -> 2.0.5 == [2.0.5,) or x >= 2.0.5
+        rule.enforceVersion("test", "2.0", version);
+        rule.enforceVersion("test", "2.0.4", version);
+        rule.enforceVersion("test", "2.0.5", version);
+
+        enforceFalse(rule, "test", "[2.0.6,)", version);
+        enforceFalse(rule, "test", "(2.0.5,)", version);
+        enforceFalse(rule, "test", "2.0.6", version);
+
+        enforceFalse(rule, "test", "[2.0.4,2.0.5)", version);
+
+        // make sure to handle the invalid range specification
+        enforceFalse(rule, "test", "[[2.0.4,2.0.5)", version);
+    }
+}
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestMavenVersion.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/version/TestMavenVersion.java
similarity index 59%
rename from enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestMavenVersion.java
rename to enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/version/TestMavenVersion.java
index 6d97aac..820dde9 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestMavenVersion.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/version/TestMavenVersion.java
@@ -16,24 +16,43 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.maven.plugins.enforcer;
-
-import java.util.Properties;
+package org.apache.maven.enforcer.rules.version;
 
+import org.apache.maven.enforcer.rule.api.EnforcerLogger;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
-import org.apache.maven.execution.MavenSession;
-import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.apache.maven.rtinfo.RuntimeInformation;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.fail;
+import static org.mockito.Mockito.when;
 
 /**
  * The Class TestMavenVersion.
  *
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
  */
-public class TestMavenVersion {
+@ExtendWith(MockitoExtension.class)
+class TestMavenVersion {
+
+    @Mock
+    private RuntimeInformation runtimeInformation;
+
+    @Mock
+    private EnforcerLogger log;
+
+    @InjectMocks
+    private RequireMavenVersion rule;
+
+    @BeforeEach
+    void setup() {
+        rule.setLog(log);
+    }
 
     /**
      * Test rule.
@@ -41,21 +60,20 @@ public class TestMavenVersion {
      * @throws EnforcerRuleException the enforcer rule exception
      */
     @Test
-    public void testRule() throws EnforcerRuleException {
+    void testRule() throws EnforcerRuleException {
 
-        RequireMavenVersion rule = new RequireMavenVersion();
-        rule.setVersion("2.0.5");
+        when(runtimeInformation.getMavenVersion()).thenReturn("3.0");
 
-        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
+        rule.setVersion("2.0.5");
 
         // test the singular version
-        rule.execute(helper);
+        rule.execute();
 
         // exclude this version
         rule.setVersion("(2.0.5");
 
         try {
-            rule.execute(helper);
+            rule.execute();
             fail("Expected an exception.");
         } catch (EnforcerRuleException e) {
             // expected to catch this.
@@ -63,7 +81,7 @@ public class TestMavenVersion {
 
         // this shouldn't crash
         rule.setVersion("2.0.5_01");
-        rule.execute(helper);
+        rule.execute();
     }
 
     /**
@@ -72,27 +90,22 @@ public class TestMavenVersion {
      * @throws EnforcerRuleException the enforcer rule exception
      */
     @Test
-    public void checkRequireVersionMatrix() throws EnforcerRuleException, ExpressionEvaluationException {
-        RequireMavenVersion rule = new RequireMavenVersion();
-
-        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
-        MavenSession mavenSession = (MavenSession) helper.evaluate("${session}");
-        Properties systemProperties = mavenSession.getSystemProperties();
+    void checkRequireVersionMatrix() throws EnforcerRuleException {
 
-        systemProperties.setProperty("maven.version", "3.6.1");
+        when(runtimeInformation.getMavenVersion()).thenReturn("3.6.1");
         rule.setVersion("3.6.0");
-        rule.execute(helper);
+        rule.execute();
 
-        systemProperties.setProperty("maven.version", "3.6.2");
+        when(runtimeInformation.getMavenVersion()).thenReturn("3.6.2");
         rule.setVersion("3.6.0");
-        rule.execute(helper);
+        rule.execute();
         rule.setVersion("3.6.1");
-        rule.execute(helper);
+        rule.execute();
         rule.setVersion("3.6.2");
-        rule.execute(helper);
+        rule.execute();
         rule.setVersion("3.6.3");
         try {
-            rule.execute(helper);
+            rule.execute();
             fail("Expected an exception.");
         } catch (EnforcerRuleException e) {
             // expected to catch this.
@@ -103,8 +116,8 @@ public class TestMavenVersion {
      * Test id.
      */
     @Test
-    public void testId() {
-        RequireMavenVersion rule = new RequireMavenVersion();
-        rule.getCacheId();
+    void testId() {
+        rule.setVersion("3.3.3");
+        assertThat(rule.getCacheId()).isNotEmpty();
     }
 }
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/version/TestRequireJavaVersion.java
similarity index 84%
rename from enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
rename to enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/version/TestRequireJavaVersion.java
index 4afecbb..38bb343 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/version/TestRequireJavaVersion.java
@@ -16,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.maven.plugins.enforcer;
+package org.apache.maven.enforcer.rules.version;
 
 import java.util.stream.Stream;
 
 import org.apache.commons.lang3.SystemUtils;
+import org.apache.maven.enforcer.rule.api.EnforcerLogger;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
@@ -30,6 +31,7 @@ import org.junit.jupiter.params.provider.MethodSource;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.Mockito.mock;
 
 /**
  * The Class TestRequireJavaVersion.
@@ -38,6 +40,13 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
  */
 class TestRequireJavaVersion {
 
+    private RequireJavaVersion rule;
+
+    @BeforeEach
+    void setup() {
+        rule = new RequireJavaVersion();
+        rule.setLog(mock(EnforcerLogger.class));
+    }
     /**
      * Test fix jdk version.
      */
@@ -76,13 +85,10 @@ class TestRequireJavaVersion {
     void settingsTheJavaVersionAsNormalizedVersionShouldNotFail() throws EnforcerRuleException {
         String normalizedJDKVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);
 
-        RequireJavaVersion rule = new RequireJavaVersion();
         rule.setVersion(normalizedJDKVersion);
 
-        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
-
         // test the singular version
-        rule.execute(helper);
+        rule.execute();
         // intentionally no assertThat(...) because we don't expect and exception.
     }
 
@@ -90,11 +96,9 @@ class TestRequireJavaVersion {
     void excludingTheCurrentJavaVersionViaRangeThisShouldFailWithException() {
         String thisVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);
         String requiredVersion = "(" + thisVersion;
-        RequireJavaVersion rule = new RequireJavaVersion();
         rule.setVersion(requiredVersion);
-        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
 
-        assertThatThrownBy(() -> rule.execute(helper))
+        assertThatThrownBy(() -> rule.execute())
                 .isInstanceOf(EnforcerRuleException.class)
                 .hasMessage("The requested JDK version %s is invalid.", requiredVersion);
     }
@@ -103,11 +107,9 @@ class TestRequireJavaVersion {
     void shouldIncludeJavaHomeLocationInTheErrorMessage() {
         String thisVersion = RequireJavaVersion.normalizeJDKVersion(SystemUtils.JAVA_VERSION);
         String requiredVersion = "10000";
-        RequireJavaVersion rule = new RequireJavaVersion();
         rule.setVersion(requiredVersion);
-        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
 
-        assertThatThrownBy(() -> rule.execute(helper))
+        assertThatThrownBy(() -> rule.execute())
                 .isInstanceOf(EnforcerRuleException.class)
                 .hasMessage(
                         "Detected JDK version %s (JAVA_HOME=%s) is not in the allowed range %s.",
@@ -118,12 +120,10 @@ class TestRequireJavaVersion {
     void shouldUseCustomErrorMessage() {
         String requiredVersion = "10000";
         String message = "My custom error message";
-        RequireJavaVersion rule = new RequireJavaVersion();
         rule.setVersion(requiredVersion);
         rule.setMessage(message);
-        EnforcerRuleHelper helper = EnforcerTestUtils.getHelper();
 
-        assertThatThrownBy(() -> rule.execute(helper))
+        assertThatThrownBy(() -> rule.execute())
                 .isInstanceOf(EnforcerRuleException.class)
                 .hasMessage(message);
     }
@@ -133,7 +133,6 @@ class TestRequireJavaVersion {
      */
     @Test
     void testId() {
-        RequireJavaVersion rule = new RequireJavaVersion();
         assertThat(rule.getCacheId()).isEqualTo("0");
     }
 
@@ -154,8 +153,7 @@ class TestRequireJavaVersion {
     @ParameterizedTest
     @MethodSource
     void fixJava8ShortVersion(String input, String expected) {
-        RequireJavaVersion requireJavaVersion = new RequireJavaVersion();
-        requireJavaVersion.setVersion(input);
-        assertThat(requireJavaVersion.getVersion()).isEqualTo(expected);
+        rule.setVersion(input);
+        assertThat(rule.getVersion()).isEqualTo(expected);
     }
 }
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestAbstractVersionEnforcer.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestAbstractVersionEnforcer.java
deleted file mode 100644
index f6aba62..0000000
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestAbstractVersionEnforcer.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * 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.
- */
-package org.apache.maven.plugins.enforcer;
-
-import org.apache.maven.artifact.versioning.ArtifactVersion;
-import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
-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.plugin.logging.Log;
-import org.apache.maven.plugin.logging.SystemStreamLog;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-/**
- * The Class TestAbstractVersionEnforcer.
- *
- * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
- */
-public class TestAbstractVersionEnforcer {
-
-    /**
-     * Test contains version.
-     *
-     * @throws InvalidVersionSpecificationException the invalid version specification exception
-     */
-    @Test
-    public void testContainsVersion() throws InvalidVersionSpecificationException {
-        ArtifactVersion version = new DefaultArtifactVersion("2.0.5");
-        // test ranges
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.0.5,)"), version));
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,)"), version));
-        assertTrue(
-                AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.5]"), version));
-        assertTrue(
-                AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.6]"), version));
-        assertTrue(
-                AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.6)"), version));
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.0,)"), version));
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.0.0,)"), version));
-        // not matching versions
-        assertFalse(
-                AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.0.4,2.0.5)"), version));
-        assertFalse(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.0.6,)"), version));
-        assertFalse(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("(2.0.5,)"), version));
-
-        // test singular versions -> 2.0.5 == [2.0.5,) or x >= 2.0.5
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("2.0"), version));
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("2.0.4"), version));
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("2.0.5"), version));
-
-        assertFalse(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("2.0.6"), version));
-
-        version = new DefaultArtifactVersion("1.5.0-7");
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[1.5.0,)"), version));
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[1.5,1.6)"), version));
-
-        version = new DefaultArtifactVersion(RequireJavaVersion.normalizeJDKVersion("1.5.0-07"));
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[1.5.0,)"), version));
-        assertTrue(AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[1.5,1.6)"), version));
-
-        // MENFORCER-50
-        version = new DefaultArtifactVersion("2.1.0-M1-RC12");
-        assertTrue(AbstractVersionEnforcer.containsVersion(
-                VersionRange.createFromVersionSpec("[2.1.0-M1-RC12,)"), version));
-        assertFalse(
-                AbstractVersionEnforcer.containsVersion(VersionRange.createFromVersionSpec("[2.1.0-M1,)"), version));
-    }
-
-    /**
-     * Enforce false.
-     *
-     * @param rule the rule
-     * @param log the log
-     * @param var the var
-     * @param range the range
-     * @param version the version
-     */
-    private void enforceFalse(
-            AbstractVersionEnforcer rule, Log log, String var, String range, ArtifactVersion version) {
-        try {
-            rule.enforceVersion(log, var, range, version);
-            fail("Expected to receive EnforcerRuleException because:" + version + " is not contained by " + range);
-        } catch (Exception e) {
-            if (e instanceof EnforcerRuleException) {
-                // log.info( "Caught Expected Exception: " +
-                // e.getLocalizedMessage() );
-            } else {
-                fail("Received wrong exception. Expected EnforcerRuleExeption. Received:" + e);
-            }
-        }
-    }
-
-    /**
-     * Test enforce version.
-     */
-    @Test
-    public void testEnforceVersion() {
-        RequireMavenVersion rule = new RequireMavenVersion();
-        ArtifactVersion version = new DefaultArtifactVersion("2.0.5");
-        SystemStreamLog log = new SystemStreamLog();
-        // test ranges
-
-        // not matching versions
-        try {
-            rule.enforceVersion(log, "test", "[2.0.5,)", version);
-            rule.enforceVersion(log, "test", "[2.0.4,)", version);
-            rule.enforceVersion(log, "test", "[2.0.4,2.0.5]", version);
-            rule.enforceVersion(log, "test", "[2.0.4,2.0.6]", version);
-            rule.enforceVersion(log, "test", "[2.0.4,2.0.6)", version);
-            rule.enforceVersion(log, "test", "[2.0,)", version);
-            rule.enforceVersion(log, "test", "[2.0.0,)", version);
-
-            // test singular versions -> 2.0.5 == [2.0.5,) or x >= 2.0.5
-            rule.enforceVersion(log, "test", "2.0", version);
-            rule.enforceVersion(log, "test", "2.0.4", version);
-            rule.enforceVersion(log, "test", "2.0.5", version);
-        } catch (Exception e) {
-            fail("No Exception expected. Caught:" + e.getLocalizedMessage());
-        }
-
-        enforceFalse(rule, log, "test", "[2.0.6,)", version);
-        enforceFalse(rule, log, "test", "(2.0.5,)", version);
-        enforceFalse(rule, log, "test", "2.0.6", version);
-
-        enforceFalse(rule, log, "test", "[2.0.4,2.0.5)", version);
-
-        // make sure to handle the invalid range specification
-        enforceFalse(rule, log, "test", "[[2.0.4,2.0.5)", version);
-    }
-}
diff --git a/maven-enforcer-plugin/src/it/projects/require-java-version/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-java-version/verify.groovy
new file mode 100644
index 0000000..e029bdb
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-java-version/verify.groovy
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+def buildLog = new File(basedir, 'build.log').text
+
+// rule executed
+assert buildLog.contains('[INFO] Rule 0: org.apache.maven.enforcer.rules.version.RequireJavaVersion executed')
+assert buildLog.contains('[INFO] Rule 1: org.apache.maven.enforcer.rules.version.RequireJavaVersion executed')
diff --git a/maven-enforcer-plugin/src/it/projects/require-maven-version/verify.groovy b/maven-enforcer-plugin/src/it/projects/require-maven-version/verify.groovy
new file mode 100644
index 0000000..9b01abe
--- /dev/null
+++ b/maven-enforcer-plugin/src/it/projects/require-maven-version/verify.groovy
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+def buildLog = new File(basedir, 'build.log').text
+
+// rule executed
+assert buildLog.contains('[INFO] Rule 0: org.apache.maven.enforcer.rules.version.RequireMavenVersion executed')
+assert buildLog.contains('[INFO] Rule 1: org.apache.maven.enforcer.rules.version.RequireMavenVersion executed')
diff --git a/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/DisplayInfoMojo.java b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/DisplayInfoMojo.java
index d9ffddd..eebb7fb 100644
--- a/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/DisplayInfoMojo.java
+++ b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/DisplayInfoMojo.java
@@ -19,6 +19,7 @@
 package org.apache.maven.plugins.enforcer;
 
 import org.apache.maven.enforcer.rules.utils.OSUtil;
+import org.apache.maven.enforcer.rules.version.RequireJavaVersion;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugins.annotations.Mojo;