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:41 UTC

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

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;