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/20 08:19:33 UTC

[maven-enforcer] 01/01: [MENFORCER-450] Code cleanup

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

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

commit 1ccbd6da0f086f30e9c2424240d800dc49928ddb
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Fri Jan 20 09:12:55 2023 +0100

    [MENFORCER-450] Code cleanup
    
    - isolate abstract class in api
    - fix date format in documentation
    - drop maven-shared-utils
    - fix javadoc warnings
    - drop old classes
---
 .../java/org/example/custom/rule/MyCustomRule.java |    2 +-
 .../enforcer/rule/api/AbstractEnforcerRule.java    |    1 +
 .../rule/api/AbstractEnforcerRuleBase.java         |    5 +-
 .../maven/enforcer/rule/api/EnforcerRule2.java     |   12 +-
 .../maven/enforcer/rule/api/EnforcerRuleBase.java  |   19 +-
 .../enforcer/rule/api/EnforcerRuleHelper.java      |    2 +
 enforcer-api/src/site/apt/index.apt                |    2 +-
 .../src/site/apt/writing-a-custom-rule.apt.vm      |    2 +-
 enforcer-rules/pom.xml                             |    4 -
 .../maven/enforcer/rules/BanDynamicVersions.java   |   15 +-
 .../rules/RequireExplicitDependencyScope.java      |   21 +-
 .../enforcer/rules/RequirePluginVersions.java      |   16 +-
 .../rules/dependency/RequireUpperBoundDeps.java    |   15 +-
 .../property/AbstractPropertyEnforcerRule.java     |    3 +-
 .../enforcer/AbstractNonCacheableEnforcerRule.java |   44 -
 .../enforcer/AbstractStandardEnforcerRule.java     |  119 --
 enforcer-rules/src/site/apt/alwaysFail.apt.vm      |    4 +-
 enforcer-rules/src/site/apt/alwaysPass.apt.vm      |    2 +-
 .../site/apt/banDependencyManagementScope.apt.vm   |    2 +-
 .../src/site/apt/banDistributionManagement.apt.vm  |    2 +-
 .../apt/banDuplicatePomDependencyVersions.apt.vm   |    2 +-
 .../src/site/apt/banTransitiveDependencies.apt.vm  |    2 +-
 .../src/site/apt/bannedDependencies.apt.vm         |    2 +-
 enforcer-rules/src/site/apt/bannedPlugins.apt.vm   |    2 +-
 .../src/site/apt/bannedRepositories.apt.vm         |    2 +-
 .../src/site/apt/evaluateBeanshell.apt.vm          |    2 +-
 enforcer-rules/src/site/apt/externalRules.apt.vm   |    2 +-
 .../src/site/apt/reactorModuleConvergence.apt.vm   |    4 +-
 .../src/site/apt/requireActiveProfile.apt.vm       |    2 +-
 .../src/site/apt/requireEnvironmentVariable.apt.vm |    2 +-
 .../src/site/apt/requireFileChecksum.apt.vm        |    2 +-
 .../src/site/apt/requireFilesDontExist.apt.vm      |    2 +-
 .../src/site/apt/requireFilesExist.apt.vm          |    2 +-
 .../src/site/apt/requireFilesSize.apt.vm           |    2 +-
 .../src/site/apt/requireJavaVendor.apt.vm          |    8 +-
 .../src/site/apt/requireJavaVersion.apt.vm         |    2 +-
 .../src/site/apt/requireMavenVersion.apt.vm        |    2 +-
 .../src/site/apt/requireNoRepositories.apt.vm      |    2 +-
 enforcer-rules/src/site/apt/requireOS.apt.vm       |    2 +-
 .../src/site/apt/requirePluginVersions.apt.vm      |    2 +-
 enforcer-rules/src/site/apt/requireProperty.apt.vm |    2 +-
 .../src/site/apt/requireReleaseDeps.apt.vm         |    2 +-
 .../src/site/apt/requireReleaseVersion.apt.vm      |    6 +-
 .../src/site/apt/requireSnapshotVersion.apt.vm     |    2 +-
 .../src/site/apt/requireTextFileChecksum.apt.vm    |    2 +-
 enforcer-rules/src/site/apt/versionRanges.apt      |    2 +-
 .../rules}/EnforcerTestUtils.java                  |  117 +-
 .../enforcer/rules/TestBannedRepositories.java     |   36 +-
 .../maven/enforcer/rules/TestExternalRules.java    |    1 -
 .../enforcer/rules/TestRequirePluginVersions.java  |    1 -
 .../rules/dependency/RequireReleaseDepsTest.java   |    4 +-
 .../utils/TestMockEnforcerExpressionEvaluator.java |    2 +-
 .../apache/maven/plugins/enforcer/MockProject.java | 1538 --------------------
 maven-enforcer-extension/src/site/apt/index.apt    |    2 +-
 .../it/projects/ban-dynamic-versions/verify.groovy |    8 +-
 .../apache/maven/plugins/enforcer/EnforceMojo.java |   78 +-
 .../internal}/DefaultEnforcementRuleHelper.java    |    2 +-
 .../enforcer/internal/EnforcerRuleDesc.java        |   22 +-
 .../enforcer/internal/EnforcerRuleManager.java     |   24 +-
 maven-enforcer-plugin/src/site/apt/index.apt       |    2 +-
 maven-enforcer-plugin/src/site/apt/usage.apt.vm    |    2 +-
 .../maven/plugins/enforcer/TestEnforceMojo.java    |    3 +
 .../apache/maven/plugins/enforcer/TestRule1.java   |    7 +-
 .../apache/maven/plugins/enforcer/TestRule2.java   |    7 +-
 .../enforcer/internal/EnforcerRuleManagerTest.java |    4 +-
 pom.xml                                            |    5 -
 66 files changed, 160 insertions(+), 2061 deletions(-)

diff --git a/enforcer-api/src/custom-rule-sample/src/main/java/org/example/custom/rule/MyCustomRule.java b/enforcer-api/src/custom-rule-sample/src/main/java/org/example/custom/rule/MyCustomRule.java
index d7a36ea..16a809d 100644
--- a/enforcer-api/src/custom-rule-sample/src/main/java/org/example/custom/rule/MyCustomRule.java
+++ b/enforcer-api/src/custom-rule-sample/src/main/java/org/example/custom/rule/MyCustomRule.java
@@ -97,7 +97,7 @@ public class MyCustomRule extends AbstractEnforcerRule {
      */
     @Override
     public String toString() {
-        return String.format("MyCustomRule[level=%s, shouldIfail=%b]", getLevel(), shouldIfail);
+        return String.format("MyCustomRule[shouldIfail=%b]", shouldIfail);
     }
 }
 // END SNIPPET: rule-implementation
diff --git a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/AbstractEnforcerRule.java b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/AbstractEnforcerRule.java
index f6d6b05..d9f9ef8 100644
--- a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/AbstractEnforcerRule.java
+++ b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/AbstractEnforcerRule.java
@@ -39,6 +39,7 @@ public abstract class AbstractEnforcerRule extends AbstractEnforcerRuleBase {
      *
      * @return an Enforcer execution level
      */
+    @Override
     public EnforcerLevel getLevel() {
         return level;
     }
diff --git a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/AbstractEnforcerRuleBase.java b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/AbstractEnforcerRuleBase.java
index 57ceb74..a185672 100644
--- a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/AbstractEnforcerRuleBase.java
+++ b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/AbstractEnforcerRuleBase.java
@@ -26,7 +26,7 @@ package org.apache.maven.enforcer.rule.api;
  * @author Slawomir Jaranowski
  * @since 3.2.0
  */
-public abstract class AbstractEnforcerRuleBase implements EnforcerRuleBase {
+abstract class AbstractEnforcerRuleBase implements EnforcerRuleBase {
 
     /**
      * EnforcerLogger instance
@@ -38,12 +38,15 @@ public abstract class AbstractEnforcerRuleBase implements EnforcerRuleBase {
      *
      * @param log an {@link EnforcerLogger} instance
      */
+    @Override
     public void setLog(EnforcerLogger log) {
         this.log = log;
     }
 
     /**
      * Provide an {@link  EnforcerLogger} instance for Rule
+     * <p>
+     * <b>NOTICE</b> A logger is not available in constructors.
      *
      * @return an {@link EnforcerLogger} instance
      */
diff --git a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRule2.java b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRule2.java
index 335c420..b9e0541 100644
--- a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRule2.java
+++ b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRule2.java
@@ -18,8 +18,6 @@
  */
 package org.apache.maven.enforcer.rule.api;
 
-import javax.annotation.Nonnull;
-
 /**
  * Interface to be implemented by any rules as of version 2.0 executed by the enforcer.
  *
@@ -29,12 +27,4 @@ import javax.annotation.Nonnull;
  *         <a href="https://maven.apache.org/enforcer/enforcer-api/writing-a-custom-rule.html">Writing a custom rule</a>
  */
 @Deprecated
-public interface EnforcerRule2 extends EnforcerRule {
-    /**
-     * Returns the level of enforcement.
-     *
-     * @return level
-     */
-    @Nonnull
-    EnforcerLevel getLevel();
-}
+public interface EnforcerRule2 extends EnforcerRule {}
diff --git a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleBase.java b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleBase.java
index 328c307..0b7ef0e 100644
--- a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleBase.java
+++ b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleBase.java
@@ -26,4 +26,21 @@ package org.apache.maven.enforcer.rule.api;
  * @author Slawomir Jaranowski
  * @since 3.2.0
  */
-public interface EnforcerRuleBase {}
+public interface EnforcerRuleBase {
+
+    /**
+     * Current Enforcer execution level
+     *
+     * @return an Enforcer execution level
+     */
+    default EnforcerLevel getLevel() {
+        return EnforcerLevel.ERROR;
+    }
+
+    /**
+     * Used by {@code EnforcerMojo} to inject logger instance
+     *
+     * @param log an {@link EnforcerLogger} instance
+     */
+    default void setLog(EnforcerLogger log) {}
+}
diff --git a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java
index 2c57263..eeaec78 100644
--- a/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java
+++ b/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRuleHelper.java
@@ -53,6 +53,7 @@ public interface EnforcerRuleHelper extends ExpressionEvaluator {
      * Gets the component.
      *
      * @param clazz the clazz
+     * @param <T> a class type
      * @return the component
      * @throws ComponentLookupException the component lookup exception
      */
@@ -84,6 +85,7 @@ public interface EnforcerRuleHelper extends ExpressionEvaluator {
      *
      * @param clazz    the clazz
      * @param roleHint the role hint
+     * @param <T> a class type
      * @return the component
      * @throws ComponentLookupException the component lookup exception
      */
diff --git a/enforcer-api/src/site/apt/index.apt b/enforcer-api/src/site/apt/index.apt
index 5454a6f..d42abc0 100644
--- a/enforcer-api/src/site/apt/index.apt
+++ b/enforcer-api/src/site/apt/index.apt
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  Mar 2007
+  2007-09-01
   ------
 
 Maven Enforcer Rule API - Extending The Loving Iron Fist of Maven\x99
diff --git a/enforcer-api/src/site/apt/writing-a-custom-rule.apt.vm b/enforcer-api/src/site/apt/writing-a-custom-rule.apt.vm
index 1216f4e..416b5f4 100644
--- a/enforcer-api/src/site/apt/writing-a-custom-rule.apt.vm
+++ b/enforcer-api/src/site/apt/writing-a-custom-rule.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  Nov 2007
+  2007-09-01
   ------
 
 Writing a custom rule
diff --git a/enforcer-rules/pom.xml b/enforcer-rules/pom.xml
index 50dcac3..9623032 100644
--- a/enforcer-rules/pom.xml
+++ b/enforcer-rules/pom.xml
@@ -53,10 +53,6 @@
       <groupId>org.eclipse.aether</groupId>
       <artifactId>aether-util</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.maven.shared</groupId>
-      <artifactId>maven-shared-utils</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/BanDynamicVersions.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/BanDynamicVersions.java
index 6335f97..d82aade 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/BanDynamicVersions.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/BanDynamicVersions.java
@@ -38,8 +38,6 @@ import org.apache.maven.enforcer.rules.utils.ArtifactMatcher;
 import org.apache.maven.enforcer.rules.utils.ArtifactUtils;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.shared.utils.logging.MessageBuilder;
-import org.apache.maven.shared.utils.logging.MessageUtils;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
@@ -185,13 +183,12 @@ public final class BanDynamicVersions extends AbstractStandardEnforcerRule {
             } else {
                 getLog().debug("Found node " + node + " with version constraint " + node.getVersionConstraint());
                 if (predicate.test(node) && isBannedDynamicVersion(node.getVersionConstraint())) {
-                    MessageBuilder msgBuilder = MessageUtils.buffer();
-                    getLog().warn(msgBuilder
-                            .a("Dependency ")
-                            .strong(node.getDependency())
-                            .mojo(dumpIntermediatePath(nodeStack))
-                            .a(" is referenced with a banned dynamic version " + node.getVersionConstraint())
-                            .toString());
+                    getLog().warnOrError(() -> new StringBuilder()
+                            .append("Dependency ")
+                            .append(node.getDependency())
+                            .append(dumpIntermediatePath(nodeStack))
+                            .append(" is referenced with a banned dynamic version ")
+                            .append(node.getVersionConstraint()));
                     numViolations++;
                     return false;
                 }
diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequireExplicitDependencyScope.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequireExplicitDependencyScope.java
index 11aeeb1..24c8775 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequireExplicitDependencyScope.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequireExplicitDependencyScope.java
@@ -29,8 +29,6 @@ import org.apache.maven.enforcer.rule.api.EnforcerLevel;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.shared.utils.logging.MessageBuilder;
-import org.apache.maven.shared.utils.logging.MessageUtils;
 
 /**
  * Checks that all dependencies have an explicitly declared scope in the non-effective pom (i.e. without taking
@@ -57,19 +55,12 @@ public final class RequireExplicitDependencyScope extends AbstractStandardEnforc
         for (Dependency dependency : dependencies) {
             getLog().debug("Found dependency " + dependency);
             if (dependency.getScope() == null) {
-                MessageBuilder msgBuilder = MessageUtils.buffer();
-                msgBuilder
-                        .a("Dependency ")
-                        .strong(dependency.getManagementKey())
-                        .a(" @ ")
-                        .strong(formatLocation(project, dependency.getLocation("")))
-                        .a(" does not have an explicit scope defined!")
-                        .toString();
-                if (getLevel() == EnforcerLevel.ERROR) {
-                    getLog().error(msgBuilder.toString());
-                } else {
-                    getLog().warn(msgBuilder.toString());
-                }
+                getLog().warnOrError(() -> new StringBuilder()
+                        .append("Dependency ")
+                        .append(dependency.getManagementKey())
+                        .append(" @ ")
+                        .append(formatLocation(project, dependency.getLocation("")))
+                        .append(" does not have an explicit scope defined!"));
                 numMissingDependencyScopes++;
             }
         }
diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequirePluginVersions.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequirePluginVersions.java
index b7e5060..ad7baf5 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequirePluginVersions.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequirePluginVersions.java
@@ -314,7 +314,7 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
      * @return The plugins which have been removed.
      * @throws MojoExecutionException
      */
-    public Set<Plugin> removeUncheckedPlugins(Collection<String> uncheckedPlugins, Set<Plugin> plugins)
+    Set<Plugin> removeUncheckedPlugins(Collection<String> uncheckedPlugins, Set<Plugin> plugins)
             throws MojoExecutionException {
         if (uncheckedPlugins != null && !uncheckedPlugins.isEmpty()) {
             for (String pluginKey : uncheckedPlugins) {
@@ -328,8 +328,8 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
     /**
      * Combines the old Collection with the new comma separated list.
      *
-     * @param uncheckedPlugins
-     * @param uncheckedPluginsList
+     * @param uncheckedPlugins a new collections
+     * @param uncheckedPluginsList a list to merge
      * @return List of unchecked plugins.
      */
     public Collection<String> combineUncheckedPlugins(
@@ -376,12 +376,12 @@ public final class RequirePluginVersions extends AbstractStandardEnforcerRule {
     /**
      * Helper method to parse and inject a Plugin.
      *
-     * @param pluginString
-     * @param field
-     * @return the plugin
-     * @throws MojoExecutionException
+     * @param pluginString a plugin description to parse
+     * @param field a source of pluginString
+     * @return the prepared plugin
+     * @throws MojoExecutionException in case of problems
      */
-    protected Plugin parsePluginString(String pluginString, String field) throws MojoExecutionException {
+    private Plugin parsePluginString(String pluginString, String field) throws MojoExecutionException {
         if (pluginString != null) {
             String[] pluginStrings = pluginString.split(":");
             if (pluginStrings.length == 2) {
diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/RequireUpperBoundDeps.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/RequireUpperBoundDeps.java
index c5c7a38..27f7889 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/RequireUpperBoundDeps.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/dependency/RequireUpperBoundDeps.java
@@ -37,7 +37,6 @@ import org.apache.maven.enforcer.rules.AbstractStandardEnforcerRule;
 import org.apache.maven.enforcer.rules.utils.ArtifactUtils;
 import org.apache.maven.enforcer.rules.utils.ParentNodeProvider;
 import org.apache.maven.enforcer.rules.utils.ParentsVisitor;
-import org.apache.maven.shared.utils.logging.MessageUtils;
 import org.eclipse.aether.graph.DependencyNode;
 import org.eclipse.aether.graph.DependencyVisitor;
 import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
@@ -79,16 +78,6 @@ public final class RequireUpperBoundDeps extends AbstractStandardEnforcerRule {
         this.resolveUtil = Objects.requireNonNull(resolveUtil);
     }
 
-    /**
-     * Set to {@code true} if timestamped snapshots should be used.
-     *
-     * @param uniqueVersions
-     * @since 1.3
-     */
-    public void setUniqueVersions(boolean uniqueVersions) {
-        this.uniqueVersions = uniqueVersions;
-    }
-
     /**
      * Sets dependencies to exclude.
      * @param excludes a list of {@code groupId:artifactId} names
@@ -193,9 +182,7 @@ public final class RequireUpperBoundDeps extends AbstractStandardEnforcerRule {
         }
 
         String scope = artifact.getScope();
-        if ("compile".equals(scope)) {
-            result = MessageUtils.buffer().strong(result).toString();
-        } else if (scope != null) {
+        if (scope != null && !"compile".equals(scope)) {
             result += " [" + scope + ']';
         }
 
diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/AbstractPropertyEnforcerRule.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/AbstractPropertyEnforcerRule.java
index 4fd10dd..305a5e2 100755
--- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/AbstractPropertyEnforcerRule.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/property/AbstractPropertyEnforcerRule.java
@@ -119,7 +119,8 @@ abstract class AbstractPropertyEnforcerRule extends AbstractStandardEnforcerRule
     /**
      * Resolves the property value
      *
-     * @throws EnforcerRuleException
+     * @return a resolve value
+     * @throws EnforcerRuleException in case of problems
      */
     protected abstract Object resolveValue() throws EnforcerRuleException;
 }
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractNonCacheableEnforcerRule.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractNonCacheableEnforcerRule.java
deleted file mode 100644
index be08cd4..0000000
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractNonCacheableEnforcerRule.java
+++ /dev/null
@@ -1,44 +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.enforcer.rule.api.EnforcerRule;
-
-/**
- * The Class AbstractNonCacheableEnforcerRule. This is to be used by rules
- * that don't need caching... it saves implementing a bunch of methods.
- *
- * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
- */
-public abstract class AbstractNonCacheableEnforcerRule extends AbstractStandardEnforcerRule {
-    @Override
-    public String getCacheId() {
-        return "0";
-    }
-
-    @Override
-    public boolean isCacheable() {
-        return false;
-    }
-
-    @Override
-    public boolean isResultValid(EnforcerRule cachedRule) {
-        return false;
-    }
-}
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractStandardEnforcerRule.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractStandardEnforcerRule.java
deleted file mode 100644
index cffc0e3..0000000
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractStandardEnforcerRule.java
+++ /dev/null
@@ -1,119 +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.enforcer.rule.api.EnforcerLevel;
-import org.apache.maven.enforcer.rule.api.EnforcerRule2;
-import org.apache.maven.model.InputLocation;
-import org.apache.maven.project.MavenProject;
-
-/**
- * The Class AbstractStandardEnforcerRule.
- */
-public abstract class AbstractStandardEnforcerRule implements EnforcerRule2 {
-
-    /**
-     * Specify a friendly message if the rule fails.
-     *
-     * @see {@link #setMessage(String)}
-     * @see {@link #getMessage()}
-     */
-    private String message;
-
-    private EnforcerLevel level = EnforcerLevel.ERROR;
-
-    public final void setMessage(String message) {
-        this.message = message;
-    }
-
-    public final String getMessage() {
-        return message;
-    }
-
-    @Override
-    public EnforcerLevel getLevel() {
-        return level;
-    }
-
-    public void setLevel(EnforcerLevel level) {
-        this.level = level;
-    }
-
-    /**
-     * Returns an identifier of a given project.
-     * @param project the project
-     * @return the identifier of the project in the format {@code <groupId>:<artifactId>:<version>}
-     */
-    private static String getProjectId(MavenProject project) {
-        StringBuilder buffer = new StringBuilder(128);
-
-        buffer.append(
-                (project.getGroupId() != null && project.getGroupId().length() > 0)
-                        ? project.getGroupId()
-                        : "[unknown-group-id]");
-        buffer.append(':');
-        buffer.append(
-                (project.getArtifactId() != null && project.getArtifactId().length() > 0)
-                        ? project.getArtifactId()
-                        : "[unknown-artifact-id]");
-        buffer.append(':');
-        buffer.append(
-                (project.getVersion() != null && project.getVersion().length() > 0)
-                        ? project.getVersion()
-                        : "[unknown-version]");
-
-        return buffer.toString();
-    }
-
-    /**
-     * Creates a string with line/column information for problems originating directly from this POM. Inspired by
-     * {@code o.a.m.model.building.ModelProblemUtils.formatLocation(...)}.
-     *
-     * @param project the current project.
-     * @param location The location which should be formatted, must not be {@code null}.
-     * @return The formatted problem location or an empty string if unknown, never {@code null}.
-     */
-    protected static String formatLocation(MavenProject project, InputLocation location) {
-        StringBuilder buffer = new StringBuilder();
-
-        if (!location.getSource().getModelId().equals(getProjectId(project))) {
-            buffer.append(location.getSource().getModelId());
-
-            if (location.getSource().getLocation().length() > 0) {
-                if (buffer.length() > 0) {
-                    buffer.append(", ");
-                }
-                buffer.append(location.getSource().getLocation());
-            }
-        }
-        if (location.getLineNumber() > 0) {
-            if (buffer.length() > 0) {
-                buffer.append(", ");
-            }
-            buffer.append("line ").append(location.getLineNumber());
-        }
-        if (location.getColumnNumber() > 0) {
-            if (buffer.length() > 0) {
-                buffer.append(", ");
-            }
-            buffer.append("column ").append(location.getColumnNumber());
-        }
-        return buffer.toString();
-    }
-}
diff --git a/enforcer-rules/src/site/apt/alwaysFail.apt.vm b/enforcer-rules/src/site/apt/alwaysFail.apt.vm
index d00b918..18ea993 100644
--- a/enforcer-rules/src/site/apt/alwaysFail.apt.vm
+++ b/enforcer-rules/src/site/apt/alwaysFail.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  August 2008
+  2008-08-06
   ------
 
 Always Fail
@@ -47,7 +47,7 @@ Always Fail
             </goals>
             <configuration>
               <rules>
-                <AlwaysFail/>
+                <alwaysFail/>
               </rules>
               <fail>true</fail>
             </configuration>
diff --git a/enforcer-rules/src/site/apt/alwaysPass.apt.vm b/enforcer-rules/src/site/apt/alwaysPass.apt.vm
index a422a11..e0bb396 100644
--- a/enforcer-rules/src/site/apt/alwaysPass.apt.vm
+++ b/enforcer-rules/src/site/apt/alwaysPass.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  August 2008
+  2008-08-06
   ------
 
 Always Pass
diff --git a/enforcer-rules/src/site/apt/banDependencyManagementScope.apt.vm b/enforcer-rules/src/site/apt/banDependencyManagementScope.apt.vm
index 6b00cf7..1d1a2ac 100644
--- a/enforcer-rules/src/site/apt/banDependencyManagementScope.apt.vm
+++ b/enforcer-rules/src/site/apt/banDependencyManagementScope.apt.vm
@@ -20,7 +20,7 @@
   ------
   Konrad Windszus
   ------
-  June 2022
+  2022-06-28
   ------
 
 Ban Dependency Management Scope
diff --git a/enforcer-rules/src/site/apt/banDistributionManagement.apt.vm b/enforcer-rules/src/site/apt/banDistributionManagement.apt.vm
index 4fc0a46..6dc2f7b 100644
--- a/enforcer-rules/src/site/apt/banDistributionManagement.apt.vm
+++ b/enforcer-rules/src/site/apt/banDistributionManagement.apt.vm
@@ -20,7 +20,7 @@
   ------
   Karl-Heinz Marbaise
   ------
-  June 2014
+  2014-06-28
   ------
 
 Ban Distribution Management
diff --git a/enforcer-rules/src/site/apt/banDuplicatePomDependencyVersions.apt.vm b/enforcer-rules/src/site/apt/banDuplicatePomDependencyVersions.apt.vm
index ccc9bc0..96e6782 100644
--- a/enforcer-rules/src/site/apt/banDuplicatePomDependencyVersions.apt.vm
+++ b/enforcer-rules/src/site/apt/banDuplicatePomDependencyVersions.apt.vm
@@ -20,7 +20,7 @@
   ------
   Guillaume Boue
   ------
-  November 2016
+  2016-11-30
   ------
 
 Ban Duplicate Pom Dependency Versions
diff --git a/enforcer-rules/src/site/apt/banTransitiveDependencies.apt.vm b/enforcer-rules/src/site/apt/banTransitiveDependencies.apt.vm
index d388183..a71bff9 100644
--- a/enforcer-rules/src/site/apt/banTransitiveDependencies.apt.vm
+++ b/enforcer-rules/src/site/apt/banTransitiveDependencies.apt.vm
@@ -19,7 +19,7 @@
   Ban Transitive Dependencies
   ------
   ------
-  August 2012
+  2012-10-09
   ------
 
 Ban Transitive Dependencies
diff --git a/enforcer-rules/src/site/apt/bannedDependencies.apt.vm b/enforcer-rules/src/site/apt/bannedDependencies.apt.vm
index 5018647..63ce4c4 100644
--- a/enforcer-rules/src/site/apt/bannedDependencies.apt.vm
+++ b/enforcer-rules/src/site/apt/bannedDependencies.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  November 2007
+  2007-09-01
   ------
 
 Banned Dependencies
diff --git a/enforcer-rules/src/site/apt/bannedPlugins.apt.vm b/enforcer-rules/src/site/apt/bannedPlugins.apt.vm
index 028e213..289fd75 100644
--- a/enforcer-rules/src/site/apt/bannedPlugins.apt.vm
+++ b/enforcer-rules/src/site/apt/bannedPlugins.apt.vm
@@ -20,7 +20,7 @@
   ------
   Paul Gier
   ------
-  November 2012
+  2012-11-23
   ------
 
 Banned Plugins
diff --git a/enforcer-rules/src/site/apt/bannedRepositories.apt.vm b/enforcer-rules/src/site/apt/bannedRepositories.apt.vm
index 7cd64c2..7d0734f 100644
--- a/enforcer-rules/src/site/apt/bannedRepositories.apt.vm
+++ b/enforcer-rules/src/site/apt/bannedRepositories.apt.vm
@@ -20,7 +20,7 @@
   ------
   Simon Wang
   ------
-  June 2014
+  2014-06-15
   ------
 
 Banned Specified Repositories
diff --git a/enforcer-rules/src/site/apt/evaluateBeanshell.apt.vm b/enforcer-rules/src/site/apt/evaluateBeanshell.apt.vm
index 8cf2e10..7478275 100644
--- a/enforcer-rules/src/site/apt/evaluateBeanshell.apt.vm
+++ b/enforcer-rules/src/site/apt/evaluateBeanshell.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  June 2007
+  2007-09-01
   ------
 
 Beanshell
diff --git a/enforcer-rules/src/site/apt/externalRules.apt.vm b/enforcer-rules/src/site/apt/externalRules.apt.vm
index b5a256f..fba231c 100644
--- a/enforcer-rules/src/site/apt/externalRules.apt.vm
+++ b/enforcer-rules/src/site/apt/externalRules.apt.vm
@@ -64,7 +64,7 @@ External Rules
                                 <externalRules>
                                     <!-- You can add multiple <ExternalRules> elements if you need to enforce -->
                                     <!-- rules from multiple resources. -->
-                                    <!-- src/build/rules.xml is a local file path relative to ${project.basedir} -->
+                                    <!-- src/build/rules.xml is a local file path relative to \${project.basedir} -->
                                     <location>src/build/rules.xml</location>
                                 </externalRules>
                             </rules>
diff --git a/enforcer-rules/src/site/apt/reactorModuleConvergence.apt.vm b/enforcer-rules/src/site/apt/reactorModuleConvergence.apt.vm
index 3bf2e5a..63b5cfc 100644
--- a/enforcer-rules/src/site/apt/reactorModuleConvergence.apt.vm
+++ b/enforcer-rules/src/site/apt/reactorModuleConvergence.apt.vm
@@ -20,7 +20,7 @@
   ------
   Karl-Heinz Marbaise
   ------
-  March 2014
+  2014-03-14
   ------
 
 Reactor Module Convergence
@@ -37,7 +37,7 @@ Reactor Module Convergence
   * <<ignoreModuleDependencies>> - Ignore module dependencies which references modules within the
     the reactor (default: false). 
 
-  Note: The current state does not correctly handle a situation like this {{mvn -pl subproject validate}}.
+  Note: The current state does not correctly handle a situation like this <<<mvn -pl subproject validate>>>.
         This will be handled correctly with the next major release (2.X) of enforcer.
 
    []
diff --git a/enforcer-rules/src/site/apt/requireActiveProfile.apt.vm b/enforcer-rules/src/site/apt/requireActiveProfile.apt.vm
index 307b6c9..e8007cf 100644
--- a/enforcer-rules/src/site/apt/requireActiveProfile.apt.vm
+++ b/enforcer-rules/src/site/apt/requireActiveProfile.apt.vm
@@ -20,7 +20,7 @@
   ------
   Karl-Heinz Marbaise
   ------
-  December 2013
+  2014-01-09
   ------
 
 Require Active Profile
diff --git a/enforcer-rules/src/site/apt/requireEnvironmentVariable.apt.vm b/enforcer-rules/src/site/apt/requireEnvironmentVariable.apt.vm
index 79e63b4..c05e827 100644
--- a/enforcer-rules/src/site/apt/requireEnvironmentVariable.apt.vm
+++ b/enforcer-rules/src/site/apt/requireEnvironmentVariable.apt.vm
@@ -20,7 +20,7 @@
   ------
   Karl-Heinz Marbaise
   ------
-  December 2013
+  2014-01-07
   ------
 
 Require Environment Variable
diff --git a/enforcer-rules/src/site/apt/requireFileChecksum.apt.vm b/enforcer-rules/src/site/apt/requireFileChecksum.apt.vm
index de4bd14..78b6909 100644
--- a/enforcer-rules/src/site/apt/requireFileChecksum.apt.vm
+++ b/enforcer-rules/src/site/apt/requireFileChecksum.apt.vm
@@ -20,7 +20,7 @@
   ------
   Edward Samson, Lyubomyr Shaydariv
   ------
-  February 2016
+  2016-11-26
   ------
 
 Require Files Checksum
diff --git a/enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm b/enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm
index 6d8b21d..53b8ca6 100644
--- a/enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm
+++ b/enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  August 2008
+  2008-08-06
   ------
 
 Require Files Don't Exist
diff --git a/enforcer-rules/src/site/apt/requireFilesExist.apt.vm b/enforcer-rules/src/site/apt/requireFilesExist.apt.vm
index e314b07..5a65f9e 100644
--- a/enforcer-rules/src/site/apt/requireFilesExist.apt.vm
+++ b/enforcer-rules/src/site/apt/requireFilesExist.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  August 2008
+  2008-08-06
   ------
 
 Require Files Exist
diff --git a/enforcer-rules/src/site/apt/requireFilesSize.apt.vm b/enforcer-rules/src/site/apt/requireFilesSize.apt.vm
index 7e7d7f0..ed4fa0d 100644
--- a/enforcer-rules/src/site/apt/requireFilesSize.apt.vm
+++ b/enforcer-rules/src/site/apt/requireFilesSize.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  August 2008
+  2008-08-06
   ------
 
 Require File Size
diff --git a/enforcer-rules/src/site/apt/requireJavaVendor.apt.vm b/enforcer-rules/src/site/apt/requireJavaVendor.apt.vm
index d7bf3bd..a9b1fb6 100644
--- a/enforcer-rules/src/site/apt/requireJavaVendor.apt.vm
+++ b/enforcer-rules/src/site/apt/requireJavaVendor.apt.vm
@@ -20,7 +20,7 @@
   ------
   Tim Sijstermans
   ------
-  July 2020
+  2020-07-31
   ------
 
 Require Java Vendor
@@ -29,11 +29,11 @@ Require Java Vendor
 
    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.
 
-   * includes - a list of allowed JDK vendors to include, by default all is included.
+   * <<includes>> - a list of allowed JDK vendors to include, by default all is included.
 
-   * excludes - a list of banned JDK vendors. These are exceptions to the includes.
+   * <<excludes>> - a list of banned JDK vendors. These are exceptions to the includes.
 
  
    Sample Plugin Configuration:
diff --git a/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm b/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
index f4acb71..4e82bf4 100644
--- a/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
+++ b/enforcer-rules/src/site/apt/requireJavaVersion.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  June 2007
+  2007-09-01
   ------
 
 Require Java Version
diff --git a/enforcer-rules/src/site/apt/requireMavenVersion.apt.vm b/enforcer-rules/src/site/apt/requireMavenVersion.apt.vm
index bb17a2f..e755536 100644
--- a/enforcer-rules/src/site/apt/requireMavenVersion.apt.vm
+++ b/enforcer-rules/src/site/apt/requireMavenVersion.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  June 2007
+  2007-09-01
   ------
 
 Require Maven Version
diff --git a/enforcer-rules/src/site/apt/requireNoRepositories.apt.vm b/enforcer-rules/src/site/apt/requireNoRepositories.apt.vm
index 5976dbe..60874d7 100644
--- a/enforcer-rules/src/site/apt/requireNoRepositories.apt.vm
+++ b/enforcer-rules/src/site/apt/requireNoRepositories.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  November 2007
+  2007-09-01
   ------
 
 Require No Repositories
diff --git a/enforcer-rules/src/site/apt/requireOS.apt.vm b/enforcer-rules/src/site/apt/requireOS.apt.vm
index 8c66d4c..1664f9d 100644
--- a/enforcer-rules/src/site/apt/requireOS.apt.vm
+++ b/enforcer-rules/src/site/apt/requireOS.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  June 2007
+  2007-09-01
   ------
 
 Require OS Version
diff --git a/enforcer-rules/src/site/apt/requirePluginVersions.apt.vm b/enforcer-rules/src/site/apt/requirePluginVersions.apt.vm
index bd35874..60bf472 100644
--- a/enforcer-rules/src/site/apt/requirePluginVersions.apt.vm
+++ b/enforcer-rules/src/site/apt/requirePluginVersions.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  November 2009
+  2009-09-01
   ------
 
 Require Plugin Versions
diff --git a/enforcer-rules/src/site/apt/requireProperty.apt.vm b/enforcer-rules/src/site/apt/requireProperty.apt.vm
index 9939395..374ae42 100644
--- a/enforcer-rules/src/site/apt/requireProperty.apt.vm
+++ b/enforcer-rules/src/site/apt/requireProperty.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  June 2007
+  2007-09-01
   ------
 
 Require Property
diff --git a/enforcer-rules/src/site/apt/requireReleaseDeps.apt.vm b/enforcer-rules/src/site/apt/requireReleaseDeps.apt.vm
index 9311a00..dc57703 100644
--- a/enforcer-rules/src/site/apt/requireReleaseDeps.apt.vm
+++ b/enforcer-rules/src/site/apt/requireReleaseDeps.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  Auguest 2008
+  2008-09-01
   ------
 
 Require Release Dependencies
diff --git a/enforcer-rules/src/site/apt/requireReleaseVersion.apt.vm b/enforcer-rules/src/site/apt/requireReleaseVersion.apt.vm
index 738e4b0..7a82101 100644
--- a/enforcer-rules/src/site/apt/requireReleaseVersion.apt.vm
+++ b/enforcer-rules/src/site/apt/requireReleaseVersion.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  August 2008
+  2008-08-06
   ------
 
 Require Release Version
@@ -30,9 +30,9 @@ Require Release 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.
     
-   * failWhenParentIsSnapshot - if the parent should be checked. Default: true 
+   * <<failWhenParentIsSnapshot>> - if the parent should be checked. Default: true
 
    []
 
diff --git a/enforcer-rules/src/site/apt/requireSnapshotVersion.apt.vm b/enforcer-rules/src/site/apt/requireSnapshotVersion.apt.vm
index 03820f9..9f6d505 100644
--- a/enforcer-rules/src/site/apt/requireSnapshotVersion.apt.vm
+++ b/enforcer-rules/src/site/apt/requireSnapshotVersion.apt.vm
@@ -20,7 +20,7 @@
   ------
   Guillaume Boue
   ------
-  September 2016
+  2016-09-20
   ------
 
 Require Snapshot Version
diff --git a/enforcer-rules/src/site/apt/requireTextFileChecksum.apt.vm b/enforcer-rules/src/site/apt/requireTextFileChecksum.apt.vm
index f210146..9f001bd 100644
--- a/enforcer-rules/src/site/apt/requireTextFileChecksum.apt.vm
+++ b/enforcer-rules/src/site/apt/requireTextFileChecksum.apt.vm
@@ -20,7 +20,7 @@
   ------
   Konrad Windszus
   ------
-  October 2020
+  2020-09-13
   ------
 
 Require Text Files Checksum
diff --git a/enforcer-rules/src/site/apt/versionRanges.apt b/enforcer-rules/src/site/apt/versionRanges.apt
index a27213b..61159df 100644
--- a/enforcer-rules/src/site/apt/versionRanges.apt
+++ b/enforcer-rules/src/site/apt/versionRanges.apt
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  May 2007
+  2007-09-01
   ------
 
 Version Range Specification   
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/EnforcerTestUtils.java
similarity index 55%
rename from enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java
rename to enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/EnforcerTestUtils.java
index cd4d953..a4d4fa8 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/EnforcerTestUtils.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/EnforcerTestUtils.java
@@ -16,34 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.maven.plugins.enforcer;
+package org.apache.maven.enforcer.rules;
 
 import java.util.Properties;
 
-import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
 import org.apache.maven.enforcer.rules.utils.DependencyNodeBuilder;
-import org.apache.maven.enforcer.rules.utils.MockEnforcerExpressionEvaluator;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenExecutionResult;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.InputLocation;
 import org.apache.maven.model.InputSource;
 import org.apache.maven.model.Plugin;
-import org.apache.maven.plugin.MojoExecution;
-import org.apache.maven.plugin.PluginParameterExpressionEvaluator;
-import org.apache.maven.plugin.descriptor.MojoDescriptor;
-import org.apache.maven.plugin.logging.SystemStreamLog;
-import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.classworlds.ClassWorld;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
-import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
 import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.collection.CollectRequest;
-import org.eclipse.aether.collection.CollectResult;
-import org.eclipse.aether.collection.DependencyCollectionException;
 import org.eclipse.aether.graph.DependencyNode;
 
 import static org.apache.maven.artifact.Artifact.SCOPE_TEST;
@@ -58,8 +46,6 @@ import static org.mockito.Mockito.when;
  */
 public final class EnforcerTestUtils {
 
-    private static RepositorySystem REPOSITORY_SYSTEM = mock(RepositorySystem.class);
-
     /**
      * Gets the maven session.
      *
@@ -83,93 +69,6 @@ public final class EnforcerTestUtils {
         return new MavenSession(mock, new DefaultRepositorySystemSession(), mer, meResult);
     }
 
-    /**
-     * Gets the helper.
-     *
-     * @return the helper
-     */
-    public static EnforcerRuleHelper getHelper() {
-        return getHelper(new MockProject(), false);
-    }
-
-    /**
-     * Gets the helper.
-     *
-     * @param mockExpression the mock expression
-     * @return the helper
-     */
-    public static EnforcerRuleHelper getHelper(boolean mockExpression) {
-        return getHelper(new MockProject(), mockExpression);
-    }
-
-    /**
-     * Gets the helper.
-     *
-     * @param project the project
-     * @return the helper
-     */
-    public static EnforcerRuleHelper getHelper(MavenProject project) {
-        return getHelper(project, false);
-    }
-
-    public static void provideCollectDependencies(DependencyNode node) {
-        try {
-            when(REPOSITORY_SYSTEM.collectDependencies(any(), any(CollectRequest.class)))
-                    .then(i -> new CollectResult(i.getArgument(1)).setRoot(node));
-        } catch (DependencyCollectionException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public static void provideCollectDependencies() {
-        provideCollectDependencies(getUniformDependencyNodeTree());
-    }
-
-    /**
-     * Gets the helper.
-     *
-     * @param project the project
-     * @param mockExpression the mock expression
-     * @return the helper
-     */
-    public static EnforcerRuleHelper getHelper(MavenProject project, boolean mockExpression) {
-        try {
-            MavenSession session = getMavenSession();
-            MojoExecution mockExecution = mock(MojoExecution.class);
-            ExpressionEvaluator eval;
-            if (mockExpression) {
-                eval = new MockEnforcerExpressionEvaluator(session);
-            } else {
-                session.setCurrentProject(project);
-                eval = new PluginParameterExpressionEvaluator(session, mockExecution);
-            }
-
-            PlexusContainer container = mock(PlexusContainer.class);
-            when(container.lookup(RepositorySystem.class)).thenReturn(REPOSITORY_SYSTEM);
-            provideCollectDependencies();
-
-            MojoDescriptor mojoDescriptor = new MojoDescriptor();
-            mojoDescriptor.setRealm(getTestClassRealm());
-            when(mockExecution.getMojoDescriptor()).thenReturn(mojoDescriptor);
-            when(container.lookup(MojoExecution.class)).thenReturn(mockExecution);
-            return new DefaultEnforcementRuleHelper(session, eval, new SystemStreamLog(), container);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * Gets the helper.
-     *
-     * @param project the project
-     * @param eval the expression evaluator to use
-     * @return the helper
-     */
-    public static EnforcerRuleHelper getHelper(MavenProject project, ExpressionEvaluator eval) {
-        MavenSession session = getMavenSession();
-        return new DefaultEnforcementRuleHelper(session, eval, new SystemStreamLog(), null);
-    }
-
     /**
      * New plugin.
      *
@@ -190,20 +89,6 @@ public final class EnforcerTestUtils {
         return plugin;
     }
 
-    public static DependencyNode getUniformDependencyNodeTree() {
-        return new DependencyNodeBuilder()
-                .withType(DependencyNodeBuilder.Type.POM)
-                .withChildNode(new DependencyNodeBuilder()
-                        .withArtifactId("childA")
-                        .withVersion("1.0.0")
-                        .build())
-                .withChildNode(new DependencyNodeBuilder()
-                        .withArtifactId("childB")
-                        .withVersion("2.0.0")
-                        .build())
-                .build();
-    }
-
     public static DependencyNode getDependencyNodeWithMultipleSnapshots() {
         return new DependencyNodeBuilder()
                 .withType(DependencyNodeBuilder.Type.POM)
diff --git a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestBannedRepositories.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestBannedRepositories.java
index 094a614..bccddaf 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestBannedRepositories.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestBannedRepositories.java
@@ -25,32 +25,34 @@ import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.MavenArtifactRepository;
 import org.apache.maven.enforcer.rule.api.EnforcerLogger;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.apache.maven.plugins.enforcer.MockProject;
+import org.apache.maven.project.MavenProject;
 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.junit.jupiter.api.Assertions.fail;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 /**
  * Test the "banned repositories" rule.
  *
  * @author <a href="mailto:wangyf2010@gmail.com">Simon Wang</a>
  */
+@ExtendWith(MockitoExtension.class)
 class TestBannedRepositories {
 
-    private BannedRepositories rule;
+    @Mock
+    private MavenProject project;
 
-    private MockProject project;
+    @InjectMocks
+    private BannedRepositories rule;
 
     @BeforeEach
     public void setUp() {
-        project = new MockProject();
-        project.setGroupId("org.apache.maven.plugins.enforcer.test");
-        project.setVersion("1.0-SNAPSHOT");
-
-        rule = new BannedRepositories(project);
-        rule.setMessage("my message");
         rule.setLog(mock(EnforcerLogger.class));
     }
 
@@ -60,8 +62,8 @@ class TestBannedRepositories {
         List<ArtifactRepository> repos = new ArrayList<>();
         repos.add(repo1);
 
-        project.setRemoteArtifactRepositories(repos);
-        project.setPluginArtifactRepositories(repos);
+        when(project.getRemoteArtifactRepositories()).thenReturn(repos);
+        when(project.getPluginArtifactRepositories()).thenReturn(repos);
 
         rule.execute();
     }
@@ -76,8 +78,8 @@ class TestBannedRepositories {
         repos.add(repo2);
         repos.add(repo3);
 
-        project.setRemoteArtifactRepositories(repos);
-        project.setPluginArtifactRepositories(repos);
+        when(project.getRemoteArtifactRepositories()).thenReturn(repos);
+        when(project.getPluginArtifactRepositories()).thenReturn(repos);
 
         List<String> bannedRepositories = new ArrayList<>();
         String pattern1 = "http://repo1/*";
@@ -102,8 +104,8 @@ class TestBannedRepositories {
         repos.add(repo1);
         repos.add(repo2);
 
-        project.setRemoteArtifactRepositories(repos);
-        project.setPluginArtifactRepositories(repos);
+        when(project.getRemoteArtifactRepositories()).thenReturn(repos);
+        when(project.getPluginArtifactRepositories()).thenReturn(repos);
 
         List<String> bannedRepositories = new ArrayList<>();
         String pattern1 = "http://repo1/*";
@@ -126,8 +128,8 @@ class TestBannedRepositories {
         repos.add(repo2);
         repos.add(repo3);
 
-        project.setRemoteArtifactRepositories(repos);
-        project.setPluginArtifactRepositories(repos);
+        when(project.getRemoteArtifactRepositories()).thenReturn(repos);
+        when(project.getPluginArtifactRepositories()).thenReturn(repos);
 
         List<String> patterns = new ArrayList<>();
         String pattern1 = "http://repo1/*";
diff --git a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestExternalRules.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestExternalRules.java
index ea6cf7b..78af21b 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestExternalRules.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestExternalRules.java
@@ -23,7 +23,6 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rules.utils.ExpressionEvaluator;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
-import org.apache.maven.plugins.enforcer.EnforcerTestUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestRequirePluginVersions.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestRequirePluginVersions.java
index a410e26..49f6320 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestRequirePluginVersions.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/TestRequirePluginVersions.java
@@ -34,7 +34,6 @@ import org.apache.maven.lifecycle.DefaultLifecycles;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.PluginManager;
-import org.apache.maven.plugins.enforcer.EnforcerTestUtils;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.rtinfo.RuntimeInformation;
 import org.codehaus.plexus.PlexusContainer;
diff --git a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/dependency/RequireReleaseDepsTest.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/dependency/RequireReleaseDepsTest.java
index 0f5f1df..b1409a6 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/dependency/RequireReleaseDepsTest.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/dependency/RequireReleaseDepsTest.java
@@ -33,8 +33,8 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import static org.apache.maven.plugins.enforcer.EnforcerTestUtils.getDependencyNodeWithMultipleSnapshots;
-import static org.apache.maven.plugins.enforcer.EnforcerTestUtils.getDependencyNodeWithMultipleTestSnapshots;
+import static org.apache.maven.enforcer.rules.EnforcerTestUtils.getDependencyNodeWithMultipleSnapshots;
+import static org.apache.maven.enforcer.rules.EnforcerTestUtils.getDependencyNodeWithMultipleTestSnapshots;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.mockito.Mockito.verifyNoInteractions;
diff --git a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/utils/TestMockEnforcerExpressionEvaluator.java b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/utils/TestMockEnforcerExpressionEvaluator.java
index 7894b25..2130818 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/utils/TestMockEnforcerExpressionEvaluator.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/utils/TestMockEnforcerExpressionEvaluator.java
@@ -18,9 +18,9 @@
  */
 package org.apache.maven.enforcer.rules.utils;
 
+import org.apache.maven.enforcer.rules.EnforcerTestUtils;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.PluginParameterExpressionEvaluator;
-import org.apache.maven.plugins.enforcer.EnforcerTestUtils;
 import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
 import org.junit.jupiter.api.Test;
 
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockProject.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockProject.java
deleted file mode 100644
index 475ffa7..0000000
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/MockProject.java
+++ /dev/null
@@ -1,1538 +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 java.io.File;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.model.Build;
-import org.apache.maven.model.CiManagement;
-import org.apache.maven.model.Contributor;
-import org.apache.maven.model.DependencyManagement;
-import org.apache.maven.model.Developer;
-import org.apache.maven.model.DistributionManagement;
-import org.apache.maven.model.IssueManagement;
-import org.apache.maven.model.License;
-import org.apache.maven.model.MailingList;
-import org.apache.maven.model.Model;
-import org.apache.maven.model.Organization;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.PluginManagement;
-import org.apache.maven.model.Prerequisites;
-import org.apache.maven.model.Reporting;
-import org.apache.maven.model.Resource;
-import org.apache.maven.model.Scm;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.artifact.InvalidDependencyVersionException;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
-
-/**
- * very simple stub of maven project, going to take a lot of work to make it useful as a stub though.
- */
-public class MockProject extends MavenProject {
-
-    /** The group id. */
-    private String groupId;
-
-    /** The artifact id. */
-    private String artifactId;
-
-    /** The name. */
-    private String name;
-
-    /** The model. */
-    private Model model;
-
-    /** The parent. */
-    private MavenProject parent;
-
-    /** The dependencies. */
-    private List dependencies;
-
-    /** The file. */
-    private File file;
-
-    /** The collected projects. */
-    private List collectedProjects;
-
-    /** The attached artifacts. */
-    private List attachedArtifacts;
-
-    /** The compile source roots. */
-    private List compileSourceRoots;
-
-    /** The test compile source roots. */
-    private List testCompileSourceRoots;
-
-    /** The script source roots. */
-    private List scriptSourceRoots;
-
-    /** The plugin artifact repositories. */
-    private List pluginArtifactRepositories;
-
-    /** The artifact repositories. */
-    private List artifactRepositories;
-
-    // private ArtifactRepository releaseArtifactRepository;
-
-    // private ArtifactRepository snapshotArtifactRepository;
-
-    /** The active profiles. */
-    private List activeProfiles;
-
-    /** The dependency artifacts. */
-    private Set dependencyArtifacts;
-
-    /** The dependency management. */
-    private DependencyManagement dependencyManagement;
-
-    /** The artifact. */
-    private Artifact artifact;
-
-    // private Map artifactMap;
-
-    /** The original model. */
-    private Model originalModel;
-
-    // private Map pluginArtifactMap;
-
-    // private Map reportArtifactMap;
-
-    // private Map extensionArtifactMap;
-
-    // private Map projectReferences;
-
-    // private Build buildOverlay;
-
-    /** The execution root. */
-    private boolean executionRoot;
-
-    /** The compile artifacts. */
-    private List compileArtifacts;
-
-    /** The compile dependencies. */
-    private List compileDependencies;
-
-    /** The system dependencies. */
-    private List systemDependencies;
-
-    /** The test classpath elements. */
-    private List testClasspathElements;
-
-    /** The test dependencies. */
-    private List testDependencies;
-
-    /** The system classpath elements. */
-    private List systemClasspathElements;
-
-    /** The system artifacts. */
-    private List systemArtifacts;
-
-    /** The test artifacts. */
-    private List testArtifacts;
-
-    /** The runtime artifacts. */
-    private List runtimeArtifacts;
-
-    /** The runtime dependencies. */
-    private List runtimeDependencies;
-
-    /** The runtime classpath elements. */
-    private List runtimeClasspathElements;
-
-    /** The model version. */
-    private String modelVersion;
-
-    /** The packaging. */
-    private String packaging;
-
-    /** The inception year. */
-    private String inceptionYear;
-
-    /** The url. */
-    private String url;
-
-    /** The description. */
-    private String description;
-
-    /** The version. */
-    private String version;
-
-    /** The default goal. */
-    private String defaultGoal;
-
-    /** The artifacts. */
-    private Set artifacts;
-
-    /** The properties. */
-    private Properties properties = new Properties();
-
-    /** The base dir. */
-    private File baseDir = null;
-
-    /**
-     * Instantiates a new mock project.
-     */
-    public MockProject() {
-        super((Model) null);
-    }
-
-    // kinda dangerous...
-    /**
-     * Instantiates a new mock project.
-     *
-     * @param model the model
-     */
-    public MockProject(Model model) {
-        // super(model);
-        super((Model) null);
-    }
-
-    // kinda dangerous...
-    /**
-     * Instantiates a new mock project.
-     *
-     * @param project the project
-     */
-    public MockProject(MavenProject project) {
-        // super(project);
-        super((Model) null);
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getModulePathAdjustment(org.apache.maven.project.MavenProject)
-     */
-    public String getModulePathAdjustment(MavenProject mavenProject) throws IOException {
-        return "";
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getArtifact()
-     */
-    public Artifact getArtifact() {
-        return artifact;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setArtifact(org.apache.maven.artifact.Artifact)
-     */
-    public void setArtifact(Artifact artifact) {
-        this.artifact = artifact;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getModel()
-     */
-    public Model getModel() {
-        return model;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getParent()
-     */
-    public MavenProject getParent() {
-        return parent;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setParent(org.apache.maven.project.MavenProject)
-     */
-    public void setParent(MavenProject mavenProject) {
-        this.parent = mavenProject;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setRemoteArtifactRepositories(java.util.List)
-     */
-    public void setRemoteArtifactRepositories(List list) {
-        this.artifactRepositories = list;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getRemoteArtifactRepositories()
-     */
-    public List getRemoteArtifactRepositories() {
-        return artifactRepositories;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#hasParent()
-     */
-    public boolean hasParent() {
-        if (parent != null) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getFile()
-     */
-    public File getFile() {
-        return file;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setFile(java.io.File)
-     */
-    public void setFile(File file) {
-        this.file = file;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getBasedir()
-     */
-    public File getBasedir() {
-        if (baseDir == null) {
-            final String path = System.getProperty("basedir");
-            baseDir = null != path ? new File(path) : new File("");
-        }
-        return baseDir;
-    }
-
-    /**
-     * Sets the base dir.
-     *
-     * @param base the new base dir
-     */
-    public void setBaseDir(File base) {
-        baseDir = base;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setDependencies(java.util.List)
-     */
-    public void setDependencies(List list) {
-        dependencies = list;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getDependencies()
-     */
-    public List getDependencies() {
-        if (dependencies == null) {
-            dependencies = Collections.EMPTY_LIST;
-        }
-        return dependencies;
-    }
-
-    /**
-     * Sets the dependency management.
-     *
-     * @param depMgt the new dependency management
-     */
-    public void setDependencyManagement(DependencyManagement depMgt) {
-        this.dependencyManagement = depMgt;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getDependencyManagement()
-     */
-    public DependencyManagement getDependencyManagement() {
-        if (dependencyManagement == null) {
-            dependencyManagement = new DependencyManagement();
-        }
-
-        return dependencyManagement;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addCompileSourceRoot(java.lang.String)
-     */
-    public void addCompileSourceRoot(String string) {
-        if (compileSourceRoots == null) {
-            compileSourceRoots = Collections.singletonList(string);
-        } else {
-            compileSourceRoots.add(string);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addScriptSourceRoot(java.lang.String)
-     */
-    public void addScriptSourceRoot(String string) {
-        if (scriptSourceRoots == null) {
-            scriptSourceRoots = Collections.singletonList(string);
-        } else {
-            scriptSourceRoots.add(string);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addTestCompileSourceRoot(java.lang.String)
-     */
-    public void addTestCompileSourceRoot(String string) {
-        if (testCompileSourceRoots == null) {
-            testCompileSourceRoots = Collections.singletonList(string);
-        } else {
-            testCompileSourceRoots.add(string);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getCompileSourceRoots()
-     */
-    public List getCompileSourceRoots() {
-        return compileSourceRoots;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getScriptSourceRoots()
-     */
-    public List getScriptSourceRoots() {
-        return scriptSourceRoots;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getTestCompileSourceRoots()
-     */
-    public List getTestCompileSourceRoots() {
-        return testCompileSourceRoots;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getCompileClasspathElements()
-     */
-    public List getCompileClasspathElements() throws DependencyResolutionRequiredException {
-        return compileSourceRoots;
-    }
-
-    /**
-     * Sets the compile artifacts.
-     *
-     * @param compileArtifacts the new compile artifacts
-     */
-    public void setCompileArtifacts(List compileArtifacts) {
-        this.compileArtifacts = compileArtifacts;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getCompileArtifacts()
-     */
-    public List getCompileArtifacts() {
-        return compileArtifacts;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getCompileDependencies()
-     */
-    public List getCompileDependencies() {
-        return compileDependencies;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getTestClasspathElements()
-     */
-    public List getTestClasspathElements() throws DependencyResolutionRequiredException {
-        return testClasspathElements;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getTestArtifacts()
-     */
-    public List getTestArtifacts() {
-        return testArtifacts;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getTestDependencies()
-     */
-    public List getTestDependencies() {
-        return testDependencies;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getRuntimeClasspathElements()
-     */
-    public List getRuntimeClasspathElements() throws DependencyResolutionRequiredException {
-        return runtimeClasspathElements;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getRuntimeArtifacts()
-     */
-    public List getRuntimeArtifacts() {
-        return runtimeArtifacts;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getRuntimeDependencies()
-     */
-    public List getRuntimeDependencies() {
-        return runtimeDependencies;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getSystemClasspathElements()
-     */
-    public List getSystemClasspathElements() throws DependencyResolutionRequiredException {
-        return systemClasspathElements;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getSystemArtifacts()
-     */
-    public List getSystemArtifacts() {
-        return systemArtifacts;
-    }
-
-    /**
-     * Sets the runtime classpath elements.
-     *
-     * @param runtimeClasspathElements the new runtime classpath elements
-     */
-    public void setRuntimeClasspathElements(List runtimeClasspathElements) {
-        this.runtimeClasspathElements = runtimeClasspathElements;
-    }
-
-    /**
-     * Sets the attached artifacts.
-     *
-     * @param attachedArtifacts the new attached artifacts
-     */
-    public void setAttachedArtifacts(List attachedArtifacts) {
-        this.attachedArtifacts = attachedArtifacts;
-    }
-
-    /**
-     * Sets the compile source roots.
-     *
-     * @param compileSourceRoots the new compile source roots
-     */
-    public void setCompileSourceRoots(List compileSourceRoots) {
-        this.compileSourceRoots = compileSourceRoots;
-    }
-
-    /**
-     * Sets the test compile source roots.
-     *
-     * @param testCompileSourceRoots the new test compile source roots
-     */
-    public void setTestCompileSourceRoots(List testCompileSourceRoots) {
-        this.testCompileSourceRoots = testCompileSourceRoots;
-    }
-
-    /**
-     * Sets the script source roots.
-     *
-     * @param scriptSourceRoots the new script source roots
-     */
-    public void setScriptSourceRoots(List scriptSourceRoots) {
-        this.scriptSourceRoots = scriptSourceRoots;
-    }
-
-    /**
-     * Sets the artifact map.
-     *
-     * @param artifactMap the new artifact map
-     */
-    public void setArtifactMap(Map artifactMap) {
-        // this.artifactMap = artifactMap;
-    }
-
-    /**
-     * Sets the plugin artifact map.
-     *
-     * @param pluginArtifactMap the new plugin artifact map
-     */
-    public void setPluginArtifactMap(Map pluginArtifactMap) {
-        // this.pluginArtifactMap = pluginArtifactMap;
-    }
-
-    /**
-     * Sets the report artifact map.
-     *
-     * @param reportArtifactMap the new report artifact map
-     */
-    public void setReportArtifactMap(Map reportArtifactMap) {
-        // this.reportArtifactMap = reportArtifactMap;
-    }
-
-    /**
-     * Sets the extension artifact map.
-     *
-     * @param extensionArtifactMap the new extension artifact map
-     */
-    public void setExtensionArtifactMap(Map extensionArtifactMap) {
-        // this.extensionArtifactMap = extensionArtifactMap;
-    }
-
-    /**
-     * Sets the project references.
-     *
-     * @param projectReferences the new project references
-     */
-    public void setProjectReferences(Map projectReferences) {
-        // this.projectReferences = projectReferences;
-    }
-
-    /**
-     * Sets the builds the overlay.
-     *
-     * @param buildOverlay the new builds the overlay
-     */
-    public void setBuildOverlay(Build buildOverlay) {
-        // this.buildOverlay = buildOverlay;
-    }
-
-    /**
-     * Sets the compile dependencies.
-     *
-     * @param compileDependencies the new compile dependencies
-     */
-    public void setCompileDependencies(List compileDependencies) {
-        this.compileDependencies = compileDependencies;
-    }
-
-    /**
-     * Sets the system dependencies.
-     *
-     * @param systemDependencies the new system dependencies
-     */
-    public void setSystemDependencies(List systemDependencies) {
-        this.systemDependencies = systemDependencies;
-    }
-
-    /**
-     * Sets the test classpath elements.
-     *
-     * @param testClasspathElements the new test classpath elements
-     */
-    public void setTestClasspathElements(List testClasspathElements) {
-        this.testClasspathElements = testClasspathElements;
-    }
-
-    /**
-     * Sets the test dependencies.
-     *
-     * @param testDependencies the new test dependencies
-     */
-    public void setTestDependencies(List testDependencies) {
-        this.testDependencies = testDependencies;
-    }
-
-    /**
-     * Sets the system classpath elements.
-     *
-     * @param systemClasspathElements the new system classpath elements
-     */
-    public void setSystemClasspathElements(List systemClasspathElements) {
-        this.systemClasspathElements = systemClasspathElements;
-    }
-
-    /**
-     * Sets the system artifacts.
-     *
-     * @param systemArtifacts the new system artifacts
-     */
-    public void setSystemArtifacts(List systemArtifacts) {
-        this.systemArtifacts = systemArtifacts;
-    }
-
-    /**
-     * Sets the test artifacts.
-     *
-     * @param testArtifacts the new test artifacts
-     */
-    public void setTestArtifacts(List testArtifacts) {
-        this.testArtifacts = testArtifacts;
-    }
-
-    /**
-     * Sets the runtime artifacts.
-     *
-     * @param runtimeArtifacts the new runtime artifacts
-     */
-    public void setRuntimeArtifacts(List runtimeArtifacts) {
-        this.runtimeArtifacts = runtimeArtifacts;
-    }
-
-    /**
-     * Sets the runtime dependencies.
-     *
-     * @param runtimeDependencies the new runtime dependencies
-     */
-    public void setRuntimeDependencies(List runtimeDependencies) {
-        this.runtimeDependencies = runtimeDependencies;
-    }
-
-    /**
-     * Sets the model.
-     *
-     * @param model the new model
-     */
-    public void setModel(Model model) {
-        this.model = model;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getSystemDependencies()
-     */
-    public List getSystemDependencies() {
-        return systemDependencies;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setModelVersion(java.lang.String)
-     */
-    public void setModelVersion(String string) {
-        this.modelVersion = string;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getModelVersion()
-     */
-    public String getModelVersion() {
-        return modelVersion;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getId()
-     */
-    public String getId() {
-        return "";
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setGroupId(java.lang.String)
-     */
-    public void setGroupId(String string) {
-        this.groupId = string;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getGroupId()
-     */
-    public String getGroupId() {
-        return groupId;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setArtifactId(java.lang.String)
-     */
-    public void setArtifactId(String string) {
-        this.artifactId = string;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getArtifactId()
-     */
-    public String getArtifactId() {
-        return artifactId;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setName(java.lang.String)
-     */
-    public void setName(String string) {
-        this.name = string;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getName()
-     */
-    public String getName() {
-        return name;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setVersion(java.lang.String)
-     */
-    public void setVersion(String string) {
-        this.version = string;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getVersion()
-     */
-    public String getVersion() {
-        return version;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getPackaging()
-     */
-    public String getPackaging() {
-        return packaging;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setPackaging(java.lang.String)
-     */
-    public void setPackaging(String string) {
-        this.packaging = string;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setInceptionYear(java.lang.String)
-     */
-    public void setInceptionYear(String string) {
-        this.inceptionYear = string;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getInceptionYear()
-     */
-    public String getInceptionYear() {
-        return inceptionYear;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setUrl(java.lang.String)
-     */
-    public void setUrl(String string) {
-        this.url = string;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getUrl()
-     */
-    public String getUrl() {
-        return url;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getPrerequisites()
-     */
-    public Prerequisites getPrerequisites() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setIssueManagement(org.apache.maven.model.IssueManagement)
-     */
-    public void setIssueManagement(IssueManagement issueManagement) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getCiManagement()
-     */
-    public CiManagement getCiManagement() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setCiManagement(org.apache.maven.model.CiManagement)
-     */
-    public void setCiManagement(CiManagement ciManagement) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getIssueManagement()
-     */
-    public IssueManagement getIssueManagement() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see
-     * org.apache.maven.project.MavenProject#setDistributionManagement(org.apache.maven.model.DistributionManagement)
-     */
-    public void setDistributionManagement(DistributionManagement distributionManagement) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getDistributionManagement()
-     */
-    public DistributionManagement getDistributionManagement() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setDescription(java.lang.String)
-     */
-    public void setDescription(String string) {
-        this.description = string;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getDescription()
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setOrganization(org.apache.maven.model.Organization)
-     */
-    public void setOrganization(Organization organization) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getOrganization()
-     */
-    public Organization getOrganization() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setScm(org.apache.maven.model.Scm)
-     */
-    public void setScm(Scm scm) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getScm()
-     */
-    public Scm getScm() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setMailingLists(java.util.List)
-     */
-    public void setMailingLists(List list) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getMailingLists()
-     */
-    public List getMailingLists() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addMailingList(org.apache.maven.model.MailingList)
-     */
-    public void addMailingList(MailingList mailingList) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setDevelopers(java.util.List)
-     */
-    public void setDevelopers(List list) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getDevelopers()
-     */
-    public List getDevelopers() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addDeveloper(org.apache.maven.model.Developer)
-     */
-    public void addDeveloper(Developer developer) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setContributors(java.util.List)
-     */
-    public void setContributors(List list) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getContributors()
-     */
-    public List getContributors() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addContributor(org.apache.maven.model.Contributor)
-     */
-    public void addContributor(Contributor contributor) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setBuild(org.apache.maven.model.Build)
-     */
-    public void setBuild(Build build) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getBuild()
-     */
-    public Build getBuild() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getResources()
-     */
-    public List getResources() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getTestResources()
-     */
-    public List getTestResources() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addResource(org.apache.maven.model.Resource)
-     */
-    public void addResource(Resource resource) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addTestResource(org.apache.maven.model.Resource)
-     */
-    public void addTestResource(Resource resource) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setReporting(org.apache.maven.model.Reporting)
-     */
-    public void setReporting(Reporting reporting) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getReporting()
-     */
-    public Reporting getReporting() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setLicenses(java.util.List)
-     */
-    public void setLicenses(List list) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getLicenses()
-     */
-    public List getLicenses() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addLicense(org.apache.maven.model.License)
-     */
-    public void addLicense(License license) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setArtifacts(java.util.Set)
-     */
-    public void setArtifacts(Set set) {
-        this.artifacts = set;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getArtifacts()
-     */
-    public Set getArtifacts() {
-        if (artifacts == null) {
-            return Collections.EMPTY_SET;
-        } else {
-            return artifacts;
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getArtifactMap()
-     */
-    public Map getArtifactMap() {
-        return Collections.singletonMap("", "");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setPluginArtifacts(java.util.Set)
-     */
-    public void setPluginArtifacts(Set set) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getPluginArtifacts()
-     */
-    public Set getPluginArtifacts() {
-        return Collections.singleton("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getPluginArtifactMap()
-     */
-    public Map getPluginArtifactMap() {
-        return Collections.singletonMap("", "");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setReportArtifacts(java.util.Set)
-     */
-    public void setReportArtifacts(Set set) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getReportArtifacts()
-     */
-    public Set getReportArtifacts() {
-        return Collections.singleton("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getReportArtifactMap()
-     */
-    public Map getReportArtifactMap() {
-        return Collections.singletonMap("", "");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setExtensionArtifacts(java.util.Set)
-     */
-    public void setExtensionArtifacts(Set set) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getExtensionArtifacts()
-     */
-    public Set getExtensionArtifacts() {
-        return Collections.singleton("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getExtensionArtifactMap()
-     */
-    public Map getExtensionArtifactMap() {
-        return Collections.singletonMap("", "");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setParentArtifact(org.apache.maven.artifact.Artifact)
-     */
-    public void setParentArtifact(Artifact artifact) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getParentArtifact()
-     */
-    public Artifact getParentArtifact() {
-        if (parent != null) {
-            return parent.getArtifact();
-        } else return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getRepositories()
-     */
-    public List getRepositories() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getReportPlugins()
-     */
-    public List getReportPlugins() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getBuildPlugins()
-     */
-    public List getBuildPlugins() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getModules()
-     */
-    public List getModules() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getPluginManagement()
-     */
-    public PluginManagement getPluginManagement() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addPlugin(org.apache.maven.model.Plugin)
-     */
-    public void addPlugin(Plugin plugin) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#injectPluginManagementInfo(org.apache.maven.model.Plugin)
-     */
-    public void injectPluginManagementInfo(Plugin plugin) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getCollectedProjects()
-     */
-    public List getCollectedProjects() {
-        return collectedProjects;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setCollectedProjects(java.util.List)
-     */
-    public void setCollectedProjects(List list) {
-        this.collectedProjects = list;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setPluginArtifactRepositories(java.util.List)
-     */
-    public void setPluginArtifactRepositories(List list) {
-        this.pluginArtifactRepositories = list;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getPluginArtifactRepositories()
-     */
-    public List getPluginArtifactRepositories() {
-        return pluginArtifactRepositories;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getDistributionManagementArtifactRepository()
-     */
-    public ArtifactRepository getDistributionManagementArtifactRepository() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getPluginRepositories()
-     */
-    public List getPluginRepositories() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setActiveProfiles(java.util.List)
-     */
-    public void setActiveProfiles(List list) {
-        activeProfiles = list;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getActiveProfiles()
-     */
-    public List getActiveProfiles() {
-        return activeProfiles;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addAttachedArtifact(org.apache.maven.artifact.Artifact)
-     */
-    public void addAttachedArtifact(Artifact theArtifact) {
-        if (attachedArtifacts == null) {
-            this.attachedArtifacts = Collections.singletonList(theArtifact);
-        } else {
-            attachedArtifacts.add(theArtifact);
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getAttachedArtifacts()
-     */
-    public List getAttachedArtifacts() {
-        return attachedArtifacts;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getGoalConfiguration(java.lang.String, java.lang.String,
-     * java.lang.String, java.lang.String)
-     */
-    public Xpp3Dom getGoalConfiguration(String string, String string1, String string2, String string3) {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getReportConfiguration(java.lang.String, java.lang.String,
-     * java.lang.String)
-     */
-    public Xpp3Dom getReportConfiguration(String string, String string1, String string2) {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getExecutionProject()
-     */
-    public MavenProject getExecutionProject() {
-        return null;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setExecutionProject(org.apache.maven.project.MavenProject)
-     */
-    public void setExecutionProject(MavenProject mavenProject) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#writeModel(java.io.Writer)
-     */
-    public void writeModel(Writer writer) throws IOException {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#writeOriginalModel(java.io.Writer)
-     */
-    public void writeOriginalModel(Writer writer) throws IOException {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getDependencyArtifacts()
-     */
-    public Set getDependencyArtifacts() {
-        return dependencyArtifacts;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setDependencyArtifacts(java.util.Set)
-     */
-    public void setDependencyArtifacts(Set set) {
-        this.dependencyArtifacts = set;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setReleaseArtifactRepository(org.apache.maven.artifact.repository.
-     * ArtifactRepository)
-     */
-    public void setReleaseArtifactRepository(ArtifactRepository artifactRepository) {
-        // this.releaseArtifactRepository = artifactRepository;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setSnapshotArtifactRepository(org.apache.maven.artifact.repository.
-     * ArtifactRepository)
-     */
-    public void setSnapshotArtifactRepository(ArtifactRepository artifactRepository) {
-        // this.snapshotArtifactRepository = artifactRepository;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setOriginalModel(org.apache.maven.model.Model)
-     */
-    public void setOriginalModel(Model model) {
-        this.originalModel = model;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getOriginalModel()
-     */
-    public Model getOriginalModel() {
-        return originalModel;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getBuildExtensions()
-     */
-    public List getBuildExtensions() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#createArtifacts(org.apache.maven.artifact.factory.ArtifactFactory,
-     * java.lang.String, org.apache.maven.artifact.resolver.filter.ArtifactFilter)
-     */
-    public Set createArtifacts(ArtifactFactory artifactFactory, String string, ArtifactFilter artifactFilter)
-            throws InvalidDependencyVersionException {
-        return Collections.EMPTY_SET;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#addProjectReference(org.apache.maven.project.MavenProject)
-     */
-    public void addProjectReference(MavenProject mavenProject) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#attachArtifact(java.lang.String, java.lang.String, java.io.File)
-     */
-    public void attachArtifact(String string, String string1, File theFile) {}
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getProperties()
-     */
-    public Properties getProperties() {
-        return this.properties;
-    }
-
-    /**
-     * Sets the property.
-     *
-     * @param key the key
-     * @param value the value
-     */
-    public void setProperty(String key, String value) {
-        properties.setProperty(key, value);
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getFilters()
-     */
-    public List getFilters() {
-        return Collections.singletonList("");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getProjectReferences()
-     */
-    public Map getProjectReferences() {
-        return Collections.singletonMap("", "");
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#isExecutionRoot()
-     */
-    public boolean isExecutionRoot() {
-        return executionRoot;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#setExecutionRoot(boolean)
-     */
-    public void setExecutionRoot(boolean b) {
-        this.executionRoot = b;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#getDefaultGoal()
-     */
-    public String getDefaultGoal() {
-        return defaultGoal;
-    }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.maven.project.MavenProject#replaceWithActiveArtifact(org.apache.maven.artifact.Artifact)
-     */
-    public Artifact replaceWithActiveArtifact(Artifact theArtifact) {
-        return null;
-    }
-}
diff --git a/maven-enforcer-extension/src/site/apt/index.apt b/maven-enforcer-extension/src/site/apt/index.apt
index 1d00ac3..c891e64 100644
--- a/maven-enforcer-extension/src/site/apt/index.apt
+++ b/maven-enforcer-extension/src/site/apt/index.apt
@@ -20,7 +20,7 @@
   ------
   Robert Scholte
   ------
-  May 2021
+  2021-05-01
   ------
 
 Maven Enforcer Extension - The Extended Loving Iron Fist of Maven\x99
diff --git a/maven-enforcer-plugin/src/it/projects/ban-dynamic-versions/verify.groovy b/maven-enforcer-plugin/src/it/projects/ban-dynamic-versions/verify.groovy
index 11abb38..cdf90a9 100644
--- a/maven-enforcer-plugin/src/it/projects/ban-dynamic-versions/verify.groovy
+++ b/maven-enforcer-plugin/src/it/projects/ban-dynamic-versions/verify.groovy
@@ -17,9 +17,9 @@
  * under the License.
  */
 File buildLog = new File( basedir, 'build.log' )
-assert buildLog.text.contains( '[WARNING] Dependency org.apache.maven.plugins.enforcer.its:menforcer138_archiver:jar:2.1.1 (compile) is referenced with a banned dynamic version [1.3,2.1.1]' )
-assert buildLog.text.contains( '[WARNING] Dependency org.apache.maven.plugins.enforcer.its:menforcer138_io:jar:LATEST (compile) is referenced with a banned dynamic version LATEST' )
-assert buildLog.text.contains( '[WARNING] Dependency org.apache.maven.plugins.enforcer.its:menforcer134_model:jar:1.0-SNAPSHOT (compile) is referenced with a banned dynamic version 1.0-SNAPSHOT' )
-assert buildLog.text.contains( '[WARNING] Dependency org.apache.maven.plugins.enforcer.its:menforcer427-a:jar:1.0 (compile) via org.apache.maven.plugins.enforcer.its:menforcer427:jar:1.0 is referenced with a banned dynamic version [1.0,2)' )
+assert buildLog.text.contains( '[ERROR] Dependency org.apache.maven.plugins.enforcer.its:menforcer138_archiver:jar:2.1.1 (compile) is referenced with a banned dynamic version [1.3,2.1.1]' )
+assert buildLog.text.contains( '[ERROR] Dependency org.apache.maven.plugins.enforcer.its:menforcer138_io:jar:LATEST (compile) is referenced with a banned dynamic version LATEST' )
+assert buildLog.text.contains( '[ERROR] Dependency org.apache.maven.plugins.enforcer.its:menforcer134_model:jar:1.0-SNAPSHOT (compile) is referenced with a banned dynamic version 1.0-SNAPSHOT' )
+assert buildLog.text.contains( '[ERROR] Dependency org.apache.maven.plugins.enforcer.its:menforcer427-a:jar:1.0 (compile) via org.apache.maven.plugins.enforcer.its:menforcer427:jar:1.0 is referenced with a banned dynamic version [1.0,2)' )
 assert buildLog.text.contains( '[ERROR] Rule 0: org.apache.maven.enforcer.rules.BanDynamicVersions failed with message' )
 assert buildLog.text.contains( 'Found 4 dependencies with dynamic versions. Look at the warnings emitted above for the details.' )
diff --git a/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceMojo.java b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceMojo.java
index e3b4113..0694a7c 100644
--- a/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceMojo.java
+++ b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceMojo.java
@@ -45,6 +45,7 @@ import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.plugins.enforcer.internal.DefaultEnforcementRuleHelper;
 import org.apache.maven.plugins.enforcer.internal.EnforcerRuleCache;
 import org.apache.maven.plugins.enforcer.internal.EnforcerRuleDesc;
 import org.apache.maven.plugins.enforcer.internal.EnforcerRuleManager;
@@ -54,6 +55,7 @@ import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.configuration.DefaultPlexusConfiguration;
 import org.codehaus.plexus.configuration.PlexusConfiguration;
 import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.util.StringUtils;
 
 /**
  * This goal executes the defined enforcer-rules once per module.
@@ -164,6 +166,8 @@ public class EnforceMojo extends AbstractMojo {
     /**
      * List of strings that matches the EnforcerRules to execute. Replacement for the <code>rules</code> property.
      *
+     * @param rulesToExecute a rules to execute
+     * @throws MojoExecutionException when values are incorrect
      * @since 3.2.0
      */
     @Parameter(required = false, property = "enforcer.rules")
@@ -180,6 +184,8 @@ public class EnforceMojo extends AbstractMojo {
     /**
      * List of strings that matches the EnforcerRules to execute.
      *
+     * @param rulesToExecute a rules to execute
+     * @throws MojoExecutionException when values are incorrect
      * @deprecated Use <code>enforcer.rules</code> property instead
      */
     @Parameter(required = false, property = "rules")
@@ -196,7 +202,7 @@ public class EnforceMojo extends AbstractMojo {
     public void execute() throws MojoExecutionException {
         Log log = this.getLog();
 
-        if (isSkip()) {
+        if (skip) {
             log.info("Skipping Rule Enforcement.");
             return;
         }
@@ -213,7 +219,7 @@ public class EnforceMojo extends AbstractMojo {
         rulesList.addAll(additionalRules);
 
         if (rulesList.isEmpty()) {
-            if (isFailIfNoRules()) {
+            if (failIfNoRules) {
                 throw new MojoExecutionException(
                         "No rules are configured. Use the skip flag if you want to disable execution.");
             } else {
@@ -417,10 +423,19 @@ public class EnforceMojo extends AbstractMojo {
     }
 
     /**
-     * @return the fail
+     * Set rule list to skip.
+     *
+     * @param rulesToSkip a rule list
      */
-    public boolean isFail() {
-        return this.fail;
+    public void setRulesToSkip(List<String> rulesToSkip) {
+        if (rulesToSkip == null) {
+            return;
+        }
+        // internally all rules begin from lowercase letter
+        this.rulesToSkip = rulesToSkip.stream()
+                .filter(Objects::nonNull)
+                .map(StringUtils::lowercaseFirstLetter)
+                .collect(Collectors.toList());
     }
 
     /**
@@ -437,10 +452,6 @@ public class EnforceMojo extends AbstractMojo {
         this.failFast = theFailFast;
     }
 
-    public boolean isFailFast() {
-        return failFast;
-    }
-
     private String createRuleMessage(
             int ruleIndex, EnforcerRuleDesc ruleDesc, EnforcerLevel level, EnforcerRuleException e) {
 
@@ -475,59 +486,10 @@ public class EnforceMojo extends AbstractMojo {
         return ruleName;
     }
 
-    /**
-     * @return the skip
-     */
-    public boolean isSkip() {
-        return this.skip;
-    }
-
-    /**
-     * @param theSkip the skip to set
-     */
-    public void setSkip(boolean theSkip) {
-        this.skip = theSkip;
-    }
-
-    /**
-     * @return the failIfNoRules
-     */
-    public boolean isFailIfNoRules() {
-        return this.failIfNoRules;
-    }
-
     /**
      * @param thefailIfNoRules the failIfNoRules to set
      */
     public void setFailIfNoRules(boolean thefailIfNoRules) {
         this.failIfNoRules = thefailIfNoRules;
     }
-
-    /**
-     * @return the project
-     */
-    public MavenProject getProject() {
-        return this.project;
-    }
-
-    /**
-     * @param theProject the project to set
-     */
-    public void setProject(MavenProject theProject) {
-        this.project = theProject;
-    }
-
-    /**
-     * @return the session
-     */
-    public MavenSession getSession() {
-        return this.session;
-    }
-
-    /**
-     * @param theSession the session to set
-     */
-    public void setSession(MavenSession theSession) {
-        this.session = theSession;
-    }
 }
diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DefaultEnforcementRuleHelper.java b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/DefaultEnforcementRuleHelper.java
similarity index 98%
rename from enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DefaultEnforcementRuleHelper.java
rename to maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/DefaultEnforcementRuleHelper.java
index a9f79f1..51536d6 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/DefaultEnforcementRuleHelper.java
+++ b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/DefaultEnforcementRuleHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.maven.plugins.enforcer;
+package org.apache.maven.plugins.enforcer.internal;
 
 import java.io.File;
 import java.util.HashMap;
diff --git a/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleDesc.java b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleDesc.java
index cc3fccb..c8cf16f 100644
--- a/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleDesc.java
+++ b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleDesc.java
@@ -27,14 +27,12 @@ import org.apache.maven.enforcer.rule.api.EnforcerRuleBase;
  * @author Slawomir Jaranowski
  * @since 3.2.0
  */
-public class EnforcerRuleDesc {
+public final class EnforcerRuleDesc {
 
     private final String name;
 
     private final EnforcerRuleBase rule;
 
-    private final EnforcerLevel level;
-
     /**
      * Create a new Rule Description
      *
@@ -44,20 +42,6 @@ public class EnforcerRuleDesc {
     public EnforcerRuleDesc(String name, EnforcerRuleBase rule) {
         this.name = name;
         this.rule = rule;
-        this.level = EnforcerLevel.ERROR;
-    }
-
-    /**
-     * Create a new Rule Description
-     *
-     * @param name  a rule name
-     * @param rule  a rule instance
-     * @param level a rule level
-     */
-    public EnforcerRuleDesc(String name, EnforcerRuleBase rule, EnforcerLevel level) {
-        this.name = name;
-        this.rule = rule;
-        this.level = level;
     }
 
     public String getName() {
@@ -69,11 +53,11 @@ public class EnforcerRuleDesc {
     }
 
     public EnforcerLevel getLevel() {
-        return level;
+        return rule.getLevel();
     }
 
     @Override
     public String toString() {
-        return String.format("EnforcerRuleDesc[name=%s, rule=%s, level=%s]", name, rule, level);
+        return String.format("EnforcerRuleDesc[name=%s, rule=%s, level=%s]", name, rule, getLevel());
     }
 }
diff --git a/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleManager.java b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleManager.java
index 2787e50..2d2c9b4 100644
--- a/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleManager.java
+++ b/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleManager.java
@@ -28,7 +28,6 @@ import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
 
-import org.apache.maven.enforcer.rule.api.AbstractEnforcerRuleBase;
 import org.apache.maven.enforcer.rule.api.EnforcerLevel;
 import org.apache.maven.enforcer.rule.api.EnforcerLogger;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleBase;
@@ -105,13 +104,12 @@ public class EnforcerRuleManager {
         EnforcerLogger enforcerLoggerWarn = new EnforcerLoggerWarn(log);
 
         for (PlexusConfiguration ruleConfig : rules.getChildren()) {
-            // we need rule level before configuration in order to proper set logger and RuleDesc
+            // we need rule level before configuration in order to proper set logger
             EnforcerLevel ruleLevel = getRuleLevelFromConfig(ruleConfig);
 
-            EnforcerRuleDesc ruleDesc =
-                    createRuleDesc(ruleConfig.getName(), ruleConfig.getAttribute("implementation"), ruleLevel);
+            EnforcerRuleDesc ruleDesc = createRuleDesc(ruleConfig.getName(), ruleConfig.getAttribute("implementation"));
             // setup logger before rule configuration
-            setupLoggerForRule(ruleDesc, ruleLevel == EnforcerLevel.ERROR ? enforcerLoggerError : enforcerLoggerWarn);
+            ruleDesc.getRule().setLog(ruleLevel == EnforcerLevel.ERROR ? enforcerLoggerError : enforcerLoggerWarn);
             if (ruleConfig.getChildCount() > 0) {
                 try {
                     componentConfigurator.configureComponent(ruleDesc.getRule(), ruleConfig, evaluator, classRealm);
@@ -132,24 +130,14 @@ public class EnforcerRuleManager {
         return EnforcerLevel.valueOf(level);
     }
 
-    private void setupLoggerForRule(EnforcerRuleDesc ruleDesc, EnforcerLogger logger) {
-        EnforcerRuleBase rule = ruleDesc.getRule();
-        if (rule instanceof AbstractEnforcerRuleBase) {
-            AbstractEnforcerRuleBase ruleBase = (AbstractEnforcerRuleBase) rule;
-            ruleBase.setLog(logger);
-        }
-    }
-
-    private EnforcerRuleDesc createRuleDesc(String name, String implementation, EnforcerLevel ruleLevel)
-            throws EnforcerRuleManagerException {
+    private EnforcerRuleDesc createRuleDesc(String name, String implementation) throws EnforcerRuleManagerException {
 
         // component name should always start at lowercase character
         String ruleName = Character.toLowerCase(name.charAt(0)) + name.substring(1);
 
         if (plexusContainer.hasComponent(EnforcerRuleBase.class, ruleName)) {
             try {
-                return new EnforcerRuleDesc(
-                        ruleName, plexusContainer.lookup(EnforcerRuleBase.class, ruleName), ruleLevel);
+                return new EnforcerRuleDesc(ruleName, plexusContainer.lookup(EnforcerRuleBase.class, ruleName));
             } catch (ComponentLookupException e) {
                 throw new EnforcerRuleManagerException(e);
             }
@@ -169,7 +157,7 @@ public class EnforcerRuleManager {
 
         try {
             return new EnforcerRuleDesc(
-                    ruleName, (EnforcerRuleBase) Class.forName(ruleClass).newInstance(), ruleLevel);
+                    ruleName, (EnforcerRuleBase) Class.forName(ruleClass).newInstance());
         } catch (Exception e) {
             throw new EnforcerRuleManagerException(
                     "Failed to create enforcer rules with name: " + ruleName + " or for class: " + ruleClass, e);
diff --git a/maven-enforcer-plugin/src/site/apt/index.apt b/maven-enforcer-plugin/src/site/apt/index.apt
index c15c17b..243d4ef 100644
--- a/maven-enforcer-plugin/src/site/apt/index.apt
+++ b/maven-enforcer-plugin/src/site/apt/index.apt
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  Mar 2007
+  2007-03-01
   ------
 
 Maven Enforcer Plugin - The Loving Iron Fist of Maven\x99
diff --git a/maven-enforcer-plugin/src/site/apt/usage.apt.vm b/maven-enforcer-plugin/src/site/apt/usage.apt.vm
index 5d05036..34ecdbe 100644
--- a/maven-enforcer-plugin/src/site/apt/usage.apt.vm
+++ b/maven-enforcer-plugin/src/site/apt/usage.apt.vm
@@ -20,7 +20,7 @@
   ------
   Brian Fox
   ------
-  Mar 2007
+  2007-03-01
   ------
 
 Usage
diff --git a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java
index 634b2ba..2938a68 100644
--- a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java
+++ b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.maven.enforcer.rule.api.EnforcerLevel;
 import org.apache.maven.enforcer.rule.api.EnforcerRule;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleError;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
@@ -299,6 +300,7 @@ class TestEnforceMojo {
         EnforcerRuleException ruleException = new EnforcerRuleException("testMessage");
 
         EnforcerRule ruleMock = Mockito.mock(EnforcerRule.class);
+        when(ruleMock.getLevel()).thenReturn(EnforcerLevel.ERROR);
         Mockito.doThrow(ruleException).when(ruleMock).execute(any(EnforcerRuleHelper.class));
         when(ruleManager.createRules(any(), any()))
                 .thenReturn(Collections.singletonList(new EnforcerRuleDesc("mock", ruleMock)));
@@ -323,6 +325,7 @@ class TestEnforceMojo {
         EnforcerRuleException enforcerRuleException = new EnforcerRuleException(npe.getLocalizedMessage(), npe);
 
         EnforcerRule ruleMock = Mockito.mock(EnforcerRule.class);
+        when(ruleMock.getLevel()).thenReturn(EnforcerLevel.ERROR);
         Mockito.doThrow(enforcerRuleException).when(ruleMock).execute(any(EnforcerRuleHelper.class));
 
         when(ruleManager.createRules(any(), any()))
diff --git a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestRule1.java b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestRule1.java
index fdef9a2..5d9bc68 100644
--- a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestRule1.java
+++ b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestRule1.java
@@ -18,11 +18,10 @@
  */
 package org.apache.maven.plugins.enforcer;
 
-import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+import org.apache.maven.enforcer.rule.api.AbstractEnforcerRule;
 
-public class TestRule1 extends AbstractNonCacheableEnforcerRule {
+public class TestRule1 extends AbstractEnforcerRule {
 
     @Override
-    public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {}
+    public void execute() {}
 }
diff --git a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestRule2.java b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestRule2.java
index 4b2a2c5..adb19a0 100644
--- a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestRule2.java
+++ b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestRule2.java
@@ -18,11 +18,10 @@
  */
 package org.apache.maven.plugins.enforcer;
 
-import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
-import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
+import org.apache.maven.enforcer.rule.api.AbstractEnforcerRule;
 
-public class TestRule2 extends AbstractNonCacheableEnforcerRule {
+public class TestRule2 extends AbstractEnforcerRule {
 
     @Override
-    public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {}
+    public void execute() {}
 }
diff --git a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleManagerTest.java b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleManagerTest.java
index a31cca7..7245758 100644
--- a/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleManagerTest.java
+++ b/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/internal/EnforcerRuleManagerTest.java
@@ -82,7 +82,7 @@ class EnforcerRuleManagerTest {
                 new EnforcerRuleManager(sessionProvider, mojoExecutionProvider, componentConfigurator, plexusContainer);
     }
 
-    void setupMocks() throws Exception {
+    void setupMocks() {
         setupMocks(false);
     }
 
@@ -257,6 +257,6 @@ class EnforcerRuleManagerTest {
 
         List<EnforcerRuleDesc> rules = enforcerRuleManager.createRules(configuration, mock(Log.class));
         assertThat(rules).hasSize(1);
-        assertThat(rules.get(0).getLevel()).isEqualTo(EnforcerLevel.WARN);
+        assertThat(rules.get(0).getLevel()).isEqualTo(EnforcerLevel.ERROR);
     }
 }
diff --git a/pom.xml b/pom.xml
index 721e986..15e7173 100644
--- a/pom.xml
+++ b/pom.xml
@@ -154,11 +154,6 @@
         <artifactId>commons-lang3</artifactId>
         <version>3.12.0</version>
       </dependency>
-      <dependency>
-        <groupId>org.apache.maven.shared</groupId>
-        <artifactId>maven-shared-utils</artifactId>
-        <version>3.3.4</version>
-      </dependency>
       <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-utils</artifactId>