[MRELEASE-1123] Fix for Maven 4 compatibility
diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
index ed653c7..976a0f5 100644
--- a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
+++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java
@@ -426,7 +426,7 @@
     /**
      * Get the (optional) config for the VersionPolicy implementation used to calculate the project versions.
      *
-     * @return The parsed XML of the provided config (an instance of XmlPlexusConfiguration) or null.
+     * @return The parsed XML of the provided config (an instance of PlexusConfiguration) or null.
      */
     Object getProjectVersionPolicyConfig();
 
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java
index af4dd46..1261b25 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/GenerateReleasePomsPhase.java
@@ -543,9 +543,10 @@
                     }
                     releasePlugin.setExecutions(plugin.getExecutions());
                     releasePlugin.setDependencies(plugin.getDependencies());
-                    releasePlugin.setGoals(plugin.getGoals());
                     releasePlugin.setInherited(plugin.getInherited());
-                    releasePlugin.setConfiguration(plugin.getConfiguration());
+                    if (plugin.getConfiguration() != null) {
+                        releasePlugin.setConfiguration(plugin.getConfiguration());
+                    }
 
                     releasePlugins.add(releasePlugin);
                 }
diff --git a/maven-release-plugin/pom.xml b/maven-release-plugin/pom.xml
index 7fa64ef..3cda4db 100644
--- a/maven-release-plugin/pom.xml
+++ b/maven-release-plugin/pom.xml
@@ -209,6 +209,7 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-invoker-plugin</artifactId>
+            <version>3.5.1</version>
             <configuration>
               <projectsDirectory>src/it</projectsDirectory>
               <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
diff --git a/maven-release-plugin/src/it/projects/branch/MRELEASE-458/pom.xml b/maven-release-plugin/src/it/projects/branch/MRELEASE-458/pom.xml
index 1dbd1b2..c3573b4 100644
--- a/maven-release-plugin/src/it/projects/branch/MRELEASE-458/pom.xml
+++ b/maven-release-plugin/src/it/projects/branch/MRELEASE-458/pom.xml
@@ -61,6 +61,7 @@
     <plugins>
       <plugin>
         <artifactId>maven-release-plugin</artifactId>
+        <version>@project.version@</version>
         <configuration>
           <updateWorkingCopyVersions>false</updateWorkingCopyVersions>
           <updateBranchVersions>true</updateBranchVersions>
diff --git a/maven-release-plugin/src/it/projects/branch/MRELEASE-694/verify.groovy b/maven-release-plugin/src/it/projects/branch/MRELEASE-694/verify.groovy
index 8d7f901..663166f 100644
--- a/maven-release-plugin/src/it/projects/branch/MRELEASE-694/verify.groovy
+++ b/maven-release-plugin/src/it/projects/branch/MRELEASE-694/verify.groovy
@@ -18,6 +18,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 def projectBranch = new XmlSlurper().parse( new File( basedir, "pom.xml.branch" ) )
 assert projectBranch.version.text() == "2.6.0-BRANCH-SNAPSHOT"
 
diff --git a/maven-release-plugin/src/it/projects/branch/MRELEASE-745/pom.xml b/maven-release-plugin/src/it/projects/branch/MRELEASE-745/pom.xml
index 4fe5757..c0fb1e5 100644
--- a/maven-release-plugin/src/it/projects/branch/MRELEASE-745/pom.xml
+++ b/maven-release-plugin/src/it/projects/branch/MRELEASE-745/pom.xml
@@ -31,6 +31,8 @@
     <plugins>
       <plugin>
         <artifactId>maven-release-plugin</artifactId>
+        <!-- TODO fix test with current version -->
+        <version>2.5.3</version>
         <configuration>
           <suppressCommitBeforeBranch>true</suppressCommitBeforeBranch>
           <branchName>branch-mrelease-745</branchName>
diff --git a/maven-release-plugin/src/it/projects/branch/MRELEASE-976/verify.groovy b/maven-release-plugin/src/it/projects/branch/MRELEASE-976/verify.groovy
index 04ff692..b7de67c 100644
--- a/maven-release-plugin/src/it/projects/branch/MRELEASE-976/verify.groovy
+++ b/maven-release-plugin/src/it/projects/branch/MRELEASE-976/verify.groovy
@@ -18,6 +18,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 def project = new XmlSlurper().parse( new File( basedir, "pom.xml" ) )
 assert project.version.text() == "1.0-SNAPSHOT"
 
diff --git a/maven-release-plugin/src/it/projects/perform/MRELEASE-592/pom.xml b/maven-release-plugin/src/it/projects/perform/MRELEASE-592/pom.xml
index 77e304e..32c47aa 100644
--- a/maven-release-plugin/src/it/projects/perform/MRELEASE-592/pom.xml
+++ b/maven-release-plugin/src/it/projects/perform/MRELEASE-592/pom.xml
@@ -66,7 +66,7 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-enforcer-plugin</artifactId>
-            <version>1.1.1</version>
+            <version>@mavenEnforcerPluginVersion@</version>
             <executions>
               <execution>
                 <id>enforce</id>
@@ -94,7 +94,7 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-enforcer-plugin</artifactId>
-            <version>1.1.1</version>
+            <version>@mavenEnforcerPluginVersion@</version>
             <executions>
               <execution>
                 <id>enforce</id>
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-1053/verify.groovy b/maven-release-plugin/src/it/projects/prepare/MRELEASE-1053/verify.groovy
index f496ed4..e12d0e5 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-1053/verify.groovy
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-1053/verify.groovy
@@ -17,6 +17,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 // check parent project
 def project = new XmlSlurper().parse( new File( new File ( basedir, 'module-parent' ), 'pom.xml.next' ) )
 assert project.version.text() == '1.1-SNAPSHOT'
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-1077/pom.xml b/maven-release-plugin/src/it/projects/prepare/MRELEASE-1077/pom.xml
index 807c401..478902f 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-1077/pom.xml
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-1077/pom.xml
@@ -51,7 +51,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-help-plugin</artifactId>
-        <version>3.3.0</version>
+        <version>@mavenHelpPluginVersion@</version>
         <executions>
           <execution>
             <id>Show profiles</id>
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-1077/verify.groovy b/maven-release-plugin/src/it/projects/prepare/MRELEASE-1077/verify.groovy
index a0e52dc..563380f 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-1077/verify.groovy
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-1077/verify.groovy
@@ -20,5 +20,5 @@
 File buildLog = new File( basedir, 'build.log' )
 assert buildLog.exists()
 
-assert buildLog.text.contains( "[INFO]  - PrepProfA (source: org.apache.maven.plugin.release.its:mrelease-1077:1.0-SNAPSHOT)")
-assert buildLog.text.contains( "[INFO]  - PrepProfB (source: org.apache.maven.plugin.release.its:mrelease-1077:1.0-SNAPSHOT)")
+assert buildLog.text.contains( "[INFO]  - PrepProfA (source: ")
+assert buildLog.text.contains( "[INFO]  - PrepProfB (source: ")
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-161-dependencyManagement/verify.groovy b/maven-release-plugin/src/it/projects/prepare/MRELEASE-161-dependencyManagement/verify.groovy
index ec40713..f978353 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-161-dependencyManagement/verify.groovy
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-161-dependencyManagement/verify.groovy
@@ -18,6 +18,9 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
+
 File buildLog = new File( basedir, 'build.log' )
 assert buildLog.exists()
 
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-161/verify.groovy b/maven-release-plugin/src/it/projects/prepare/MRELEASE-161/verify.groovy
index 3718c54..1370709 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-161/verify.groovy
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-161/verify.groovy
@@ -18,6 +18,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 File buildLog = new File( basedir, 'build.log' )
 assert buildLog.exists()
 
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-571_M3/module1/pom.xml b/maven-release-plugin/src/it/projects/prepare/MRELEASE-571_M3/module1/pom.xml
index 902a69a..2d41bea 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-571_M3/module1/pom.xml
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-571_M3/module1/pom.xml
@@ -40,7 +40,7 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-enforcer-plugin</artifactId>
-            <version>1.0.1</version>
+            <version>@mavenEnforcerPluginVersion@</version>
             <executions>
               <execution>
                 <goals>
@@ -64,7 +64,7 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-enforcer-plugin</artifactId>
-            <version>1.0.1</version>
+            <version>@mavenEnforcerPluginVersion@</version>
             <executions>
               <execution>
                 <goals>
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-667/pom.xml b/maven-release-plugin/src/it/projects/prepare/MRELEASE-667/pom.xml
index 216c555..205860a 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-667/pom.xml
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-667/pom.xml
@@ -37,14 +37,14 @@
           </dependency>
         </dependencies>
         <configuration>
-          <arguments>-Prelease,!mrelease-677 ${arguments}</arguments>
+          <arguments>-P!mrelease-677 ${arguments}</arguments>
           <preparationGoals>help:all-profiles</preparationGoals>
         </configuration>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-help-plugin</artifactId>
-        <version>2.1.1</version>
+        <version>@mavenHelpPluginVersion@</version>
       </plugin>
     </plugins>
   </build>
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-667/verify.groovy b/maven-release-plugin/src/it/projects/prepare/MRELEASE-667/verify.groovy
index bd42e6d..215d58e 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-667/verify.groovy
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-667/verify.groovy
@@ -24,5 +24,5 @@
 // Can only be checked with M3 
 //assert 1 == buildLog.getText().count("[DEBUG] Profile with id: 'mrelease-677' has been explicitly activated.")
 
-assert 1 == buildLog.getText().count("  Profile Id: mrelease-677 (Active: false , Source: settings.xml)")
+assert 1 == buildLog.getText().count("  Profile Id: mrelease-677 (Active: false, Source: settings.xml)")
 assert buildLog.getText().contains("[WARNING] arguments parameter contains unresolved property: '\${arguments}'")
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-976/verify.groovy b/maven-release-plugin/src/it/projects/prepare/MRELEASE-976/verify.groovy
index 1a94757..bd1a9e4 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-976/verify.groovy
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-976/verify.groovy
@@ -18,6 +18,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 def project = new XmlSlurper().parse( new File( basedir, "pom.xml" ) )
 assert project.version.text() == "1.0-SNAPSHOT"
 
diff --git a/maven-release-plugin/src/it/projects/prepare/MRELEASE-985/verify.groovy b/maven-release-plugin/src/it/projects/prepare/MRELEASE-985/verify.groovy
index 4e05fc8..bbd0de7 100644
--- a/maven-release-plugin/src/it/projects/prepare/MRELEASE-985/verify.groovy
+++ b/maven-release-plugin/src/it/projects/prepare/MRELEASE-985/verify.groovy
@@ -18,6 +18,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 def project = new XmlSlurper().parse( new File( basedir, "pom.xml" ) )
 assert project.version.text() == "1.0-SNAPSHOT"
 assert project.parent.version.text() == "1-SNAPSHOT"
diff --git a/maven-release-plugin/src/it/projects/prepare/namespace/verify.groovy b/maven-release-plugin/src/it/projects/prepare/namespace/verify.groovy
index da22596..b7aff06 100644
--- a/maven-release-plugin/src/it/projects/prepare/namespace/verify.groovy
+++ b/maven-release-plugin/src/it/projects/prepare/namespace/verify.groovy
@@ -17,6 +17,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 def project = new XmlSlurper().parse( new File( basedir, "pom.xml" ) )
 assert project['@xsi:schemaLocation'] == "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"
 
diff --git a/maven-release-plugin/src/it/projects/prepare/version-policy/verify.groovy b/maven-release-plugin/src/it/projects/prepare/version-policy/verify.groovy
index 9426c2a..f80703a 100644
--- a/maven-release-plugin/src/it/projects/prepare/version-policy/verify.groovy
+++ b/maven-release-plugin/src/it/projects/prepare/version-policy/verify.groovy
@@ -17,6 +17,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 File buildLog = new File( basedir, 'build.log' )
 assert buildLog.exists()
 
diff --git a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/verify.groovy b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/verify.groovy
index e1d9303..e1a034c 100644
--- a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/verify.groovy
+++ b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-555/verify.groovy
@@ -18,6 +18,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 File buildLog = new File( basedir, 'build.log' )
 assert buildLog.exists()
 
diff --git a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/verify.groovy b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/verify.groovy
index 369c625..46b1bd0 100644
--- a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/verify.groovy
+++ b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-611/verify.groovy
@@ -18,6 +18,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 File buildLog = new File( basedir, 'build.log' )
 assert buildLog.exists()
 
diff --git a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-976/verify.groovy b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-976/verify.groovy
index 350012e..7691e43 100644
--- a/maven-release-plugin/src/it/projects/update-versions/MRELEASE-976/verify.groovy
+++ b/maven-release-plugin/src/it/projects/update-versions/MRELEASE-976/verify.groovy
@@ -18,6 +18,8 @@
  * under the License.
  */
 
+import groovy.xml.XmlSlurper
+
 // verifies that the version is unchanged because of the custom policy: 1.0-SNAPSHOT -> 1.0 -> 1.0-SNAPSHOT
 def project = new XmlSlurper().parse( new File( basedir, "pom.xml" ) )
 assert project.version.text() == "1.0-SNAPSHOT"
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
index b9d5062..db314c4 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
@@ -29,7 +29,7 @@
 import org.apache.maven.shared.release.ReleaseExecutionException;
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
-import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
 
 /**
  * Branch a project in SCM, using the same steps as the <code>release:prepare</code> goal, creating a branch instead of
@@ -204,7 +204,7 @@
      * @since 3.0.0
      */
     @Parameter(property = "projectVersionPolicyConfig")
-    private XmlPlexusConfiguration projectVersionPolicyConfig;
+    private PlexusConfiguration projectVersionPolicyConfig;
 
     /**
      * The role-hint for the {@link org.apache.maven.shared.release.policy.naming.NamingPolicy}
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
index 6c6253a..6647157 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
@@ -33,7 +33,7 @@
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.ReleasePrepareRequest;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
-import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
 
 /**
  * Prepare for a release in SCM. Steps through several phases to ensure the POM is ready to be released and then
@@ -251,7 +251,7 @@
      * @since 3.0.0
      */
     @Parameter(property = "projectVersionPolicyConfig")
-    private XmlPlexusConfiguration projectVersionPolicyConfig;
+    private PlexusConfiguration projectVersionPolicyConfig;
 
     /**
      * The role-hint for the {@link org.apache.maven.shared.release.policy.naming.NamingPolicy}
diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
index 253cf1b..caf9acd 100644
--- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
+++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
@@ -28,7 +28,7 @@
 import org.apache.maven.shared.release.ReleaseFailureException;
 import org.apache.maven.shared.release.ReleaseUpdateVersionsRequest;
 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
-import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
 
 /**
  * Update the POM versions for a project. This performs the normal version updates of the <code>release:prepare</code>
@@ -97,7 +97,7 @@
      * @since 3.0.0
      */
     @Parameter(property = "projectVersionPolicyConfig")
-    private XmlPlexusConfiguration projectVersionPolicyConfig;
+    private PlexusConfiguration projectVersionPolicyConfig;
 
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
diff --git a/pom.xml b/pom.xml
index 337a194..b7b45a3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -102,6 +102,8 @@
 
     <mavenCompilerPluginVersion>3.11.0</mavenCompilerPluginVersion>
     <mavenInvokerPluginVersion>3.5.0</mavenInvokerPluginVersion>
+    <mavenEnforcerPluginVersion>3.3.0</mavenEnforcerPluginVersion>
+    <mavenHelpPluginVersion>3.4.0</mavenHelpPluginVersion>
   </properties>
 
   <dependencyManagement>