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

gnodet pushed a commit to branch m-api
in repository https://gitbox.apache.org/repos/asf/maven-plugin-tools.git

commit 63a0ba28c5ebdeb460b966e782a91c5dd731beca
Author: Guillaume Nodet <[email protected]>
AuthorDate: Fri Jul 22 11:18:22 2022 +0200

    Support mojos using the new API
---
 maven-plugin-annotations/pom.xml                   |  4 +-
 maven-plugin-plugin/pom.xml                        |  7 +-
 .../src/main/java/fr/ca/MyMojo.java                |  3 +-
 maven-plugin-plugin/src/it/settings.xml            |  4 +
 maven-plugin-report-plugin/pom.xml                 |  2 +-
 .../src/it/fix-maven-since-3.x/pom.xml             |  5 ++
 .../src/main/java/org/DummyReport.java             |  3 +-
 .../src/it/plugin-report/pom.xml                   | 14 ++++
 .../src/main/java/org/DummyReport.java             |  6 +-
 maven-plugin-tools-annotations/pom.xml             |  6 +-
 .../JavaAnnotationsMojoDescriptorExtractor.java    | 38 +++++++++-
 .../scanner/DefaultMojoAnnotationsScanner.java     | 48 ++++++++++--
 .../annotations/scanner/MojoAnnotatedClass.java    | 13 ++++
 .../scanner/MojoAnnotationsScanner.java            | 12 ++-
 .../scanner/visitors/MojoClassVisitor.java         | 48 +++++++++---
 .../plugin/extractor/annotations/FooMojo.java      |  3 +-
 maven-plugin-tools-api/pom.xml                     |  2 +-
 .../maven/tools/plugin/ExtendedMojoDescriptor.java | 16 +++-
 .../maven/tools/plugin/util/stubs/MojoStub.java    | 54 +------------
 maven-plugin-tools-generators/pom.xml              |  2 +-
 .../generator/PluginDescriptorFilesGenerator.java  |  7 ++
 .../plugin/generator/PluginHelpGenerator.java      |  6 ++
 .../src/main/resources/help-class-source.vm        | 88 ++++++++++++++--------
 .../generator/AbstractGeneratorTestCase.java       | 18 +----
 maven-plugin-tools-java/pom.xml                    |  2 +-
 .../javadoc/JavaMojoDescriptorExtractorTest.java   | 11 +--
 maven-script/maven-plugin-tools-ant/pom.xml        |  2 +-
 maven-script/maven-plugin-tools-beanshell/pom.xml  |  2 +-
 maven-script/maven-plugin-tools-model/pom.xml      |  2 +-
 maven-script/maven-script-ant/pom.xml              |  2 +-
 .../apache/maven/script/ant/AntMojoWrapper.java    |  3 +-
 maven-script/maven-script-beanshell/pom.xml        |  2 +-
 maven-script/pom.xml                               |  2 +-
 pom.xml                                            |  8 +-
 34 files changed, 283 insertions(+), 162 deletions(-)

diff --git a/maven-plugin-annotations/pom.xml b/maven-plugin-annotations/pom.xml
index e752eb7d..1d1bcd03 100644
--- a/maven-plugin-annotations/pom.xml
+++ b/maven-plugin-annotations/pom.xml
@@ -21,9 +21,9 @@
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
-    <artifactId>maven-plugin-tools</artifactId>
     <groupId>org.apache.maven.plugin-tools</groupId>
-    <version>3.7.1-SNAPSHOT</version>
+    <artifactId>maven-plugin-tools</artifactId>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-plugin-annotations</artifactId>
diff --git a/maven-plugin-plugin/pom.xml b/maven-plugin-plugin/pom.xml
index 3f69c50f..750852ed 100644
--- a/maven-plugin-plugin/pom.xml
+++ b/maven-plugin-plugin/pom.xml
@@ -21,9 +21,9 @@
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
-    <artifactId>maven-plugin-tools</artifactId>
     <groupId>org.apache.maven.plugin-tools</groupId>
-    <version>3.7.1-SNAPSHOT</version>
+    <artifactId>maven-plugin-tools</artifactId>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.apache.maven.plugins</groupId>
@@ -38,11 +38,12 @@
   </description>
 
   <prerequisites>
-    <maven>${mavenVersion}</maven>
+    <maven>3.2.5</maven>
   </prerequisites>
 
   <properties>
     <it.debug>true</it.debug>
+    <javaVersion>8</javaVersion>
   </properties>
 
   <dependencies>
diff --git 
a/maven-plugin-plugin/src/it/mplugin-272_java8/src/main/java/fr/ca/MyMojo.java 
b/maven-plugin-plugin/src/it/mplugin-272_java8/src/main/java/fr/ca/MyMojo.java
index 07750203..7ba20750 100644
--- 
a/maven-plugin-plugin/src/it/mplugin-272_java8/src/main/java/fr/ca/MyMojo.java
+++ 
b/maven-plugin-plugin/src/it/mplugin-272_java8/src/main/java/fr/ca/MyMojo.java
@@ -21,7 +21,6 @@ package fr.ca;
 
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 
@@ -31,7 +30,7 @@ import org.apache.maven.plugins.annotations.Mojo;
 @Mojo(name="test-plugin",defaultPhase = LifecyclePhase.GENERATE_SOURCES)
 public class MyMojo extends AbstractMojo {
     @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
+    public void execute() throws MojoExecutionException {
 
     }
 }
diff --git a/maven-plugin-plugin/src/it/settings.xml 
b/maven-plugin-plugin/src/it/settings.xml
index 44480e37..564f5d6e 100644
--- a/maven-plugin-plugin/src/it/settings.xml
+++ b/maven-plugin-plugin/src/it/settings.xml
@@ -39,9 +39,11 @@ under the License.
           <url>@localRepositoryUrl@</url>
           <releases>
             <enabled>true</enabled>
+            <checksumPolicy>ignore</checksumPolicy>
           </releases>
           <snapshots>
             <enabled>true</enabled>
+            <checksumPolicy>ignore</checksumPolicy>
           </snapshots>
         </repository>
       </repositories>
@@ -51,9 +53,11 @@ under the License.
           <url>@localRepositoryUrl@</url>
           <releases>
             <enabled>true</enabled>
+            <checksumPolicy>ignore</checksumPolicy>
           </releases>
           <snapshots>
             <enabled>true</enabled>
+            <checksumPolicy>ignore</checksumPolicy>
           </snapshots>
         </pluginRepository>
       </pluginRepositories>
diff --git a/maven-plugin-report-plugin/pom.xml 
b/maven-plugin-report-plugin/pom.xml
index 24342904..08dd74ec 100644
--- a/maven-plugin-report-plugin/pom.xml
+++ b/maven-plugin-report-plugin/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <artifactId>maven-plugin-tools</artifactId>
         <groupId>org.apache.maven.plugin-tools</groupId>
-        <version>3.7.1-SNAPSHOT</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
     <groupId>org.apache.maven.plugins</groupId>
diff --git a/maven-plugin-report-plugin/src/it/fix-maven-since-3.x/pom.xml 
b/maven-plugin-report-plugin/src/it/fix-maven-since-3.x/pom.xml
index 2f4bf851..47ea4d51 100644
--- a/maven-plugin-report-plugin/src/it/fix-maven-since-3.x/pom.xml
+++ b/maven-plugin-report-plugin/src/it/fix-maven-since-3.x/pom.xml
@@ -34,6 +34,11 @@
     <module>javasample-maven-plugin</module>
   </modules>
 
+  <properties>
+    <maven.compiler.target>1.8</maven.compiler.target>
+    <maven.compiler.source>1.8</maven.compiler.source>
+  </properties>
+
   <dependencies>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
diff --git 
a/maven-plugin-report-plugin/src/it/plugin-report-annotations/src/main/java/org/DummyReport.java
 
b/maven-plugin-report-plugin/src/it/plugin-report-annotations/src/main/java/org/DummyReport.java
index 9eabcd55..24c7a418 100644
--- 
a/maven-plugin-report-plugin/src/it/plugin-report-annotations/src/main/java/org/DummyReport.java
+++ 
b/maven-plugin-report-plugin/src/it/plugin-report-annotations/src/main/java/org/DummyReport.java
@@ -195,11 +195,10 @@ public class DummyReport
         private final Locale locale;
 
         /**
-         * @param project not null
          * @param sink    not null
          * @param locale  not null
          */
-        public PluginOverviewRenderer( Sink sink, Locale locale )
+        PluginOverviewRenderer( Sink sink, Locale locale )
         {
             super( sink );
 
diff --git a/maven-plugin-report-plugin/src/it/plugin-report/pom.xml 
b/maven-plugin-report-plugin/src/it/plugin-report/pom.xml
index e665568d..ea16542c 100644
--- a/maven-plugin-report-plugin/src/it/plugin-report/pom.xml
+++ b/maven-plugin-report-plugin/src/it/plugin-report/pom.xml
@@ -34,6 +34,8 @@ under the License.
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <maven.compiler.target>1.8</maven.compiler.target>
+    <maven.compiler.source>1.8</maven.compiler.source>
   </properties>
 
   <dependencies>
@@ -69,6 +71,18 @@ under the License.
 
   <build>
     <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>3.0.0</version>
+        <dependencies>
+          <dependency>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>extra-enforcer-rules</artifactId>
+            <version>1.5.1</version>
+          </dependency>
+        </dependencies>
+      </plugin>
     <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
diff --git 
a/maven-plugin-report-plugin/src/it/plugin-report/src/main/java/org/DummyReport.java
 
b/maven-plugin-report-plugin/src/it/plugin-report/src/main/java/org/DummyReport.java
index 302314dd..bc0447e5 100644
--- 
a/maven-plugin-report-plugin/src/it/plugin-report/src/main/java/org/DummyReport.java
+++ 
b/maven-plugin-report-plugin/src/it/plugin-report/src/main/java/org/DummyReport.java
@@ -120,7 +120,7 @@ public class DummyReport
         {
             return;
         }
-        if (skip || skipReport)
+        if ( skip || skipReport )
         {
             getLog().info( "Maven Plugin Plugin Report generation skipped." );
             return;
@@ -181,12 +181,10 @@ public class DummyReport
         private final Locale locale;
 
         /**
-         * @param project not null
          * @param sink not null
          * @param locale not null
          */
-        public PluginOverviewRenderer( Sink sink,
-                                       Locale locale )
+        PluginOverviewRenderer( Sink sink, Locale locale )
         {
             super( sink );
 
diff --git a/maven-plugin-tools-annotations/pom.xml 
b/maven-plugin-tools-annotations/pom.xml
index 1830d669..0019be03 100644
--- a/maven-plugin-tools-annotations/pom.xml
+++ b/maven-plugin-tools-annotations/pom.xml
@@ -22,7 +22,7 @@
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-plugin-tools</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-plugin-tools-annotations</artifactId>
@@ -151,6 +151,10 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+      </plugin>
     </plugins>
   </build>
 
diff --git 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/JavaAnnotationsMojoDescriptorExtractor.java
 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/JavaAnnotationsMojoDescriptorExtractor.java
index ac7b4ea9..c368e0e5 100644
--- 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/JavaAnnotationsMojoDescriptorExtractor.java
+++ 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/JavaAnnotationsMojoDescriptorExtractor.java
@@ -416,8 +416,22 @@ public class JavaAnnotationsMojoDescriptorExtractor
         }
         catch ( NoClassDefFoundError e )
         {
-            getLogger().warn( "Failed extracting tag '" + tagName + "' from 
class " + javaClass );
-            throw e;
+            if ( e.getMessage().replace( '/', '.' )
+                    .contains( MojoAnnotationsScanner.V4_API_PLUGIN_PACKAGE ) )
+            {
+                return null;
+            }
+            String str;
+            try
+            {
+                str = javaClass.getFullyQualifiedName();
+            }
+            catch ( Throwable t )
+            {
+                str = javaClass.getValue();
+            }
+            getLogger().warn( "Failed extracting tag '" + tagName + "' from 
class " + str );
+            throw (NoClassDefFoundError) new NoClassDefFoundError( 
e.getMessage() ).initCause( e );
         }
     }
 
@@ -476,8 +490,22 @@ public class JavaAnnotationsMojoDescriptorExtractor
         }
         catch ( NoClassDefFoundError e )
         {
-            getLogger().warn( "Failed extracting parameters from " + javaClass 
);
-            throw e;
+            if ( e.getMessage().replace( '/', '.' )
+                    .contains( MojoAnnotationsScanner.V4_API_PLUGIN_PACKAGE ) )
+            {
+                return new TreeMap<>();
+            }
+            String str;
+            try
+            {
+                str = javaClass.getFullyQualifiedName();
+            }
+            catch ( Throwable t )
+            {
+                str = javaClass.getValue();
+            }
+            getLogger().warn( "Failed extracting parameters from " + str );
+            throw (NoClassDefFoundError) new NoClassDefFoundError( 
e.getMessage() ).initCause( e );
         }
     }
 
@@ -628,6 +656,8 @@ public class JavaAnnotationsMojoDescriptorExtractor
             mojoDescriptor.setImplementation( 
mojoAnnotatedClass.getClassName() );
             mojoDescriptor.setLanguage( "java" );
 
+            mojoDescriptor.setV4Api( mojoAnnotatedClass.isV4Api() );
+
             MojoAnnotationContent mojo = mojoAnnotatedClass.getMojo();
 
             mojoDescriptor.setDescription( mojo.getDescription() );
diff --git 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/DefaultMojoAnnotationsScanner.java
 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/DefaultMojoAnnotationsScanner.java
index c0e3ed88..081799e1 100644
--- 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/DefaultMojoAnnotationsScanner.java
+++ 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/DefaultMojoAnnotationsScanner.java
@@ -49,7 +49,9 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Pattern;
@@ -68,6 +70,17 @@ public class DefaultMojoAnnotationsScanner
     extends AbstractLogEnabled
     implements MojoAnnotationsScanner
 {
+    public static final String MVN4_API = 
"org.apache.maven.api.plugin.annotations.";
+    public static final String MOJO_V4 = MVN4_API + "Mojo";
+    public static final String EXECUTE_V4 = MVN4_API + "Execute";
+    public static final String PARAMETER_V4 = MVN4_API + "Parameter";
+    public static final String COMPONENT_V4 = MVN4_API + "Component";
+
+    public static final String MOJO_V3 = Mojo.class.getName();
+    public static final String EXECUTE_V3 = Execute.class.getName();
+    public static final String PARAMETER_V3 = Parameter.class.getName();
+    public static final String COMPONENT_V3 = Component.class.getName();
+
     // classes with a dash must be ignored
     private static final Pattern SCANNABLE_CLASS = Pattern.compile( 
"[^-]+\\.class" );
     private static final String EMPTY = "";
@@ -274,7 +287,11 @@ public class DefaultMojoAnnotationsScanner
         try
         {
             // @Mojo annotation
-            MojoAnnotationVisitor mojoAnnotationVisitor = 
mojoClassVisitor.getAnnotationVisitor( Mojo.class );
+            MojoAnnotationVisitor mojoAnnotationVisitor = 
mojoClassVisitor.getAnnotationVisitor( MOJO_V3 );
+            if ( mojoAnnotationVisitor == null )
+            {
+                mojoAnnotationVisitor = mojoClassVisitor.getAnnotationVisitor( 
MOJO_V4 );
+            }
             if ( mojoAnnotationVisitor != null )
             {
                 MojoAnnotationContent mojoAnnotationContent = new 
MojoAnnotationContent();
@@ -289,7 +306,11 @@ public class DefaultMojoAnnotationsScanner
             }
 
             // @Execute annotation
-            mojoAnnotationVisitor = mojoClassVisitor.getAnnotationVisitor( 
Execute.class );
+            mojoAnnotationVisitor = mojoClassVisitor.getAnnotationVisitor( 
EXECUTE_V3 );
+            if ( mojoAnnotationVisitor == null )
+            {
+                mojoAnnotationVisitor = mojoClassVisitor.getAnnotationVisitor( 
EXECUTE_V4 );
+            }
             if ( mojoAnnotationVisitor != null )
             {
                 ExecuteAnnotationContent executeAnnotationContent = new 
ExecuteAnnotationContent();
@@ -298,7 +319,8 @@ public class DefaultMojoAnnotationsScanner
             }
 
             // @Parameter annotations
-            List<MojoParameterVisitor> mojoParameterVisitors = 
mojoClassVisitor.findParameterVisitors();
+            List<MojoParameterVisitor> mojoParameterVisitors = 
mojoClassVisitor.findParameterVisitors(
+                    new HashSet<>( Arrays.asList( PARAMETER_V3, PARAMETER_V4 ) 
) );
             for ( MojoParameterVisitor parameterVisitor : 
mojoParameterVisitors )
             {
                 ParameterAnnotationContent parameterAnnotationContent =
@@ -306,9 +328,16 @@ public class DefaultMojoAnnotationsScanner
                                                     
parameterVisitor.getTypeParameters() );
 
                 Map<String, MojoAnnotationVisitor> annotationVisitorMap = 
parameterVisitor.getAnnotationVisitorMap();
-                MojoAnnotationVisitor fieldAnnotationVisitor = 
annotationVisitorMap.get( Parameter.class.getName() );
+                MojoAnnotationVisitor fieldAnnotationVisitor = 
annotationVisitorMap.get( PARAMETER_V3 );
+                if ( fieldAnnotationVisitor == null )
+                {
+                    fieldAnnotationVisitor = annotationVisitorMap.get( 
PARAMETER_V4 );
+                }
 
-                populateAnnotationContent( parameterAnnotationContent, 
fieldAnnotationVisitor );
+                if ( fieldAnnotationVisitor != null )
+                {
+                    populateAnnotationContent( parameterAnnotationContent, 
fieldAnnotationVisitor );
+                }
 
                 if ( annotationVisitorMap.containsKey( 
Deprecated.class.getName() ) )
                 {
@@ -320,14 +349,19 @@ public class DefaultMojoAnnotationsScanner
             }
 
             // @Component annotations
-            List<MojoFieldVisitor> mojoFieldVisitors = 
mojoClassVisitor.findFieldWithAnnotation( Component.class );
+            List<MojoFieldVisitor> mojoFieldVisitors = 
mojoClassVisitor.findFieldWithAnnotation(
+                    new HashSet<>( Arrays.asList( COMPONENT_V3, COMPONENT_V4 ) 
) );
             for ( MojoFieldVisitor mojoFieldVisitor : mojoFieldVisitors )
             {
                 ComponentAnnotationContent componentAnnotationContent =
                     new ComponentAnnotationContent( 
mojoFieldVisitor.getFieldName() );
 
                 Map<String, MojoAnnotationVisitor> annotationVisitorMap = 
mojoFieldVisitor.getAnnotationVisitorMap();
-                MojoAnnotationVisitor annotationVisitor = 
annotationVisitorMap.get( Component.class.getName() );
+                MojoAnnotationVisitor annotationVisitor = 
annotationVisitorMap.get( COMPONENT_V3 );
+                if ( annotationVisitor == null )
+                {
+                    annotationVisitor = annotationVisitorMap.get( COMPONENT_V4 
);
+                }
 
                 if ( annotationVisitor != null )
                 {
diff --git 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/MojoAnnotatedClass.java
 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/MojoAnnotatedClass.java
index ab5f5b15..9c5e6ee1 100644
--- 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/MojoAnnotatedClass.java
+++ 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/MojoAnnotatedClass.java
@@ -57,6 +57,8 @@ public class MojoAnnotatedClass
      */
     private Artifact artifact;
 
+    private boolean v4Api;
+
     public MojoAnnotatedClass()
     {
         // no op
@@ -151,6 +153,16 @@ public class MojoAnnotatedClass
         return !( getComponents().isEmpty() && getParameters().isEmpty() && 
execute == null && mojo == null );
     }
 
+    public boolean isV4Api()
+    {
+        return v4Api;
+    }
+
+    public void setV4Api( boolean v4Api )
+    {
+        this.v4Api = v4Api;
+    }
+
     @Override
     public String toString()
     {
@@ -162,6 +174,7 @@ public class MojoAnnotatedClass
         sb.append( ", execute=" ).append( execute );
         sb.append( ", parameters=" ).append( parameters );
         sb.append( ", components=" ).append( components );
+        sb.append( ", v4api=" ).append( v4Api );
         sb.append( '}' );
         return sb.toString();
     }
diff --git 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/MojoAnnotationsScanner.java
 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/MojoAnnotationsScanner.java
index e1eb5f35..afb50b41 100644
--- 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/MojoAnnotationsScanner.java
+++ 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/MojoAnnotationsScanner.java
@@ -37,13 +37,21 @@ public interface MojoAnnotationsScanner
 {
     String ROLE = MojoAnnotationsScanner.class.getName();
 
+    String V4_API_PLUGIN_PACKAGE = "org.apache.maven.api.plugin";
+
+    String V4_API_ANNOTATIONS_PACKAGE = V4_API_PLUGIN_PACKAGE + ".annotations";
+
     List<String> CLASS_LEVEL_ANNOTATIONS = Arrays.asList( Mojo.class.getName(),
                                                           
Execute.class.getName(),
-                                                          
Deprecated.class.getName() );
+                                                          
Deprecated.class.getName(),
+                                                          
V4_API_ANNOTATIONS_PACKAGE + ".Mojo",
+                                                          
V4_API_ANNOTATIONS_PACKAGE + ".Execute" );
 
     List<String> FIELD_LEVEL_ANNOTATIONS = Arrays.asList( 
Parameter.class.getName(),
                                                           
Component.class.getName(),
-                                                          
Deprecated.class.getName() );
+                                                          
Deprecated.class.getName(),
+                                                          
V4_API_ANNOTATIONS_PACKAGE + ".Parameter",
+                                                          
V4_API_ANNOTATIONS_PACKAGE + ".Component" );
 
     List<String> METHOD_LEVEL_ANNOTATIONS = Arrays.asList( 
Parameter.class.getName(),
                                                            
Deprecated.class.getName() );
diff --git 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/visitors/MojoClassVisitor.java
 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/visitors/MojoClassVisitor.java
index 6267d64f..1cda2255 100644
--- 
a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/visitors/MojoClassVisitor.java
+++ 
b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/visitors/MojoClassVisitor.java
@@ -25,6 +25,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -70,28 +71,49 @@ public class MojoClassVisitor
 
     public MojoAnnotationVisitor getAnnotationVisitor( Class<?> annotation )
     {
-        return annotationVisitorMap.get( annotation.getName() );
+        return getAnnotationVisitor( annotation.getName() );
+    }
+
+    public MojoAnnotationVisitor getAnnotationVisitor( String name )
+    {
+        return annotationVisitorMap.get( name );
     }
 
     public List<MojoFieldVisitor> findFieldWithAnnotation( Class<?> annotation 
)
     {
-        String annotationClassName = annotation.getName();
+        return findFieldWithAnnotation( Collections.singleton( 
annotation.getName() ) );
+    }
+
+    public List<MojoFieldVisitor> findFieldWithAnnotation( Set<String> 
annotationClassNames )
+    {
+        List<MojoFieldVisitor> mojoFieldVisitors = new 
ArrayList<MojoFieldVisitor>();
+
+        for ( MojoFieldVisitor mojoFieldVisitor : this.fieldVisitors )
+        {
+            Map<String, MojoAnnotationVisitor> filedVisitorMap = 
mojoFieldVisitor.getAnnotationVisitorMap();
+            if ( filedVisitorMap.keySet().stream().anyMatch( 
annotationClassNames::contains ) )
+            {
+                mojoFieldVisitors.add( mojoFieldVisitor );
+            }
+        }
 
-        return fieldVisitors.stream()
-            .filter( field -> field.getAnnotationVisitorMap().containsKey( 
annotationClassName ) )
-            .collect( Collectors.toList() );
+        return mojoFieldVisitors;
     }
 
     public List<MojoParameterVisitor> findParameterVisitors()
+    {
+        return findParameterVisitors( Collections.singleton( 
Parameter.class.getName() ) );
+    }
+
+    public List<MojoParameterVisitor> findParameterVisitors( Set<String> 
annotationClassNames )
     {
         String annotationClassName = Parameter.class.getName();
 
-        return Stream
-            .concat(
-                findFieldWithAnnotation( Parameter.class ).stream(),
-                methodVisitors.stream()
-                    .filter( method -> 
method.getAnnotationVisitorMap().containsKey( annotationClassName ) ) )
-            .collect( Collectors.toList() );
+        return Stream.concat(
+                    findFieldWithAnnotation( Parameter.class ).stream(),
+                    methodVisitors.stream()
+                            .filter( method -> 
method.getAnnotationVisitorMap().containsKey( annotationClassName ) ) )
+                .collect( Collectors.toList() );
     }
 
     @Override
@@ -113,6 +135,10 @@ public class MojoClassVisitor
         {
             return null;
         }
+        if ( annotationClassName.startsWith( 
MojoAnnotationsScanner.V4_API_ANNOTATIONS_PACKAGE ) )
+        {
+            mojoAnnotatedClass.setV4Api( true );
+        }
         MojoAnnotationVisitor mojoAnnotationVisitor = new 
MojoAnnotationVisitor( annotationClassName );
         annotationVisitorMap.put( annotationClassName, mojoAnnotationVisitor );
         return mojoAnnotationVisitor;
diff --git 
a/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/extractor/annotations/FooMojo.java
 
b/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/extractor/annotations/FooMojo.java
index c044d161..87f7fb32 100644
--- 
a/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/extractor/annotations/FooMojo.java
+++ 
b/maven-plugin-tools-annotations/src/test/java/org/apache/maven/tools/plugin/extractor/annotations/FooMojo.java
@@ -23,7 +23,6 @@ import java.util.List;
 
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Execute;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -106,7 +105,7 @@ public class FooMojo
 
     @Override
     public void execute()
-        throws MojoExecutionException, MojoFailureException
+        throws MojoExecutionException
     {
         // nothing
     }
diff --git a/maven-plugin-tools-api/pom.xml b/maven-plugin-tools-api/pom.xml
index 523fde74..dd7073df 100644
--- a/maven-plugin-tools-api/pom.xml
+++ b/maven-plugin-tools-api/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-plugin-tools</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-plugin-tools-api</artifactId>
diff --git 
a/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/ExtendedMojoDescriptor.java
 
b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/ExtendedMojoDescriptor.java
index 7a54c456..7946be09 100644
--- 
a/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/ExtendedMojoDescriptor.java
+++ 
b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/ExtendedMojoDescriptor.java
@@ -35,6 +35,8 @@ public class ExtendedMojoDescriptor
 
     private String requiresDependencyCollection = null;
 
+    private boolean v4Api = false;
+
     public ExtendedMojoDescriptor()
     {
         this( false );
@@ -72,7 +74,7 @@ public class ExtendedMojoDescriptor
     {
         this.requiresDependencyCollection = requiresDependencyCollection;
     }
-    
+
     /**
      * Indicates if the methods {@link #getDescription()}, {@link 
#getDeprecated()}, {@link Parameter#getDescription()}
      * and {@link Parameter#getDeprecated()} return XHTML values.
@@ -84,4 +86,16 @@ public class ExtendedMojoDescriptor
     {
         return containsXhtmlTextValues;
     }
+
+    @Override
+    public boolean isV4Api()
+    {
+        return v4Api;
+    }
+
+    @Override
+    public void setV4Api( boolean v4Api )
+    {
+        this.v4Api = v4Api;
+    }
 }
diff --git 
a/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java
 
b/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java
index f271b009..d7f42986 100644
--- 
a/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java
+++ 
b/maven-plugin-tools-api/src/test/java/org/apache/maven/tools/plugin/util/stubs/MojoStub.java
@@ -23,7 +23,6 @@ import java.util.Map;
 
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.logging.Log;
 
 /**
@@ -32,13 +31,6 @@ import org.apache.maven.plugin.logging.Log;
 public class MojoStub
     extends AbstractMojo
 {
-    /** {@inheritDoc} */
-    @Override
-    public Log getLog()
-    {
-        return super.getLog();
-    }
-
     /** {@inheritDoc} */
     @Override
     public Map getPluginContext()
@@ -46,13 +38,6 @@ public class MojoStub
         return super.getPluginContext();
     }
 
-    /** {@inheritDoc} */
-    @Override
-    public void setLog( Log log )
-    {
-        super.setLog( log );
-    }
-
     /** {@inheritDoc} */
     @Override
     public void setPluginContext( Map pluginContext )
@@ -60,47 +45,10 @@ public class MojoStub
         super.setPluginContext( pluginContext );
     }
 
-    /** {@inheritDoc} */
-    @Override
-    protected Object clone()
-        throws CloneNotSupportedException
-    {
-        return super.clone();
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public boolean equals( Object obj )
-    {
-        return super.equals( obj );
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void finalize()
-        throws Throwable
-    {
-        super.finalize();
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int hashCode()
-    {
-        return super.hashCode();
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public String toString()
-    {
-        return super.toString();
-    }
-
     /** {@inheritDoc} */
     @Override
     public void execute()
-        throws MojoExecutionException, MojoFailureException
+        throws MojoExecutionException
     {
 
     }
diff --git a/maven-plugin-tools-generators/pom.xml 
b/maven-plugin-tools-generators/pom.xml
index 3fb4b444..61ffd71b 100644
--- a/maven-plugin-tools-generators/pom.xml
+++ b/maven-plugin-tools-generators/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-plugin-tools</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-plugin-tools-generators</artifactId>
diff --git 
a/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorFilesGenerator.java
 
b/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorFilesGenerator.java
index cce415f0..8e102420 100644
--- 
a/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorFilesGenerator.java
+++ 
b/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorFilesGenerator.java
@@ -448,6 +448,13 @@ public class PluginDescriptorFilesGenerator
             }
 
             GeneratorUtils.element( w, "threadSafe", String.valueOf( 
extendedMojoDescriptor.isThreadSafe() ) );
+
+            boolean v4Api = extendedMojoDescriptor.isV4Api();
+            if ( v4Api )
+            {
+                GeneratorUtils.element( w, "v4Api", String.valueOf( v4Api ) );
+            }
+
         }
 
         // 
----------------------------------------------------------------------
diff --git 
a/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginHelpGenerator.java
 
b/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginHelpGenerator.java
index 49174e51..4d3a5a3b 100644
--- 
a/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginHelpGenerator.java
+++ 
b/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginHelpGenerator.java
@@ -57,6 +57,7 @@ public class PluginHelpGenerator
     private String helpPackageName;
     private String goalPrefix;
     private MavenProject mavenProject;
+    private boolean useMaven4Api;
     private VelocityComponent velocityComponent;
 
     /**
@@ -76,6 +77,10 @@ public class PluginHelpGenerator
     {
         String helpImplementation = getImplementation();
 
+        useMaven4Api = mavenProject.getDependencies().stream()
+                        .anyMatch( dep -> "org.apache.maven".equals( 
dep.getGroupId() )
+                                && "maven-api-core".equals( 
dep.getArtifactId() ) );
+
         try
         {
             String sourcePath = helpImplementation.replace( '.', 
File.separatorChar ) + ".java";
@@ -138,6 +143,7 @@ public class PluginHelpGenerator
         // TODO: evaluate prefix from deserialized plugin
         context.put( "goalPrefix", goalPrefix );
         context.put( "useAnnotations", useAnnotations );
+        context.put( "useMaven4Api", useMaven4Api );
 
         StringWriter stringWriter = new StringWriter();
 
diff --git 
a/maven-plugin-tools-generators/src/main/resources/help-class-source.vm 
b/maven-plugin-tools-generators/src/main/resources/help-class-source.vm
index 06cc56e7..e0d4ec79 100644
--- a/maven-plugin-tools-generators/src/main/resources/help-class-source.vm
+++ b/maven-plugin-tools-generators/src/main/resources/help-class-source.vm
@@ -1,3 +1,10 @@
+#if ( $useMaven4Api )
+#set ( $mojoException = "MojoException" )
+#set ( $logger = "logger" )
+#else
+#set ( $mojoException = "MojoExecutionException" )
+#set ( $logger = "getLog()" )
+#end
 ## 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
@@ -5,9 +12,9 @@
 ## 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
@@ -18,12 +25,20 @@
 package ${helpPackageName};
 #end
 
+#if( $useMaven4Api )
+import org.apache.maven.api.plugin.MojoException;
+import org.apache.maven.api.plugin.annotations.Component;
+import org.apache.maven.api.plugin.annotations.Mojo;
+import org.apache.maven.api.plugin.annotations.Parameter;
+import org.apache.maven.api.plugin.Log;
+#else
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 #if ( $useAnnotations )
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 #end
+#end
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -43,26 +58,37 @@ import java.util.List;
  * Display help information on ${artifactId}.<br>
  * Call <code>mvn ${goalPrefix}:help -Ddetail=true 
-Dgoal=&lt;goal-name&gt;</code> to display parameter details.
  * @author maven-plugin-tools
-#if ( !$useAnnotations )     
+#if ( !$useAnnotations )
  * @goal help
  * @requiresProject false
  * @threadSafe
 #end
  */
-#if ( $useAnnotations )
+#if ( $useMaven4Api )
+@Mojo( name = "help", requiresProject = false )
+#elseif ( $useAnnotations )
 @Mojo( name = "help", requiresProject = false, threadSafe = true )
 #end
 public class HelpMojo
+#if ( $useMaven4Api )
+    implements org.apache.maven.api.plugin.Mojo
+#else
     extends AbstractMojo
+#end
 {
+#if ( $useMaven4Api )
+    @Component
+    private Log logger;
+
+#end
     /**
      * If <code>true</code>, display all settable properties for each goal.
      *
-#if ( !$useAnnotations )     
+#if ( !$useAnnotations )
      * @parameter property="detail" default-value="false"
 #end
      */
-#if ( $useAnnotations )     
+#if ( $useAnnotations || $useMaven4Api )
     @Parameter( property = "detail", defaultValue = "false" )
 #end
     private boolean detail;
@@ -70,23 +96,23 @@ public class HelpMojo
     /**
      * The name of the goal for which to show help. If unspecified, all goals 
will be displayed.
      *
-#if ( !$useAnnotations )     
+#if ( !$useAnnotations )
      * @parameter property="goal"
 #end
      */
-#if ( $useAnnotations )     
+#if ( $useAnnotations || $useMaven4Api )
     @Parameter( property = "goal" )
-#end    
+#end
     private java.lang.String goal;
 
     /**
      * The maximum length of a display line, should be positive.
      *
-#if ( !$useAnnotations )     
+#if ( !$useAnnotations )
      * @parameter property="lineLength" default-value="80"
 #end
      */
-#if ( $useAnnotations )     
+#if ( $useAnnotations || $useMaven4Api )
     @Parameter( property = "lineLength", defaultValue = "80" )
 #end
     private int lineLength;
@@ -94,11 +120,11 @@ public class HelpMojo
     /**
      * The number of spaces per indentation level, should be positive.
      *
-#if ( !$useAnnotations )     
+#if ( !$useAnnotations )
      * @parameter property="indentSize" default-value="2"
 #end
      */
-#if ( $useAnnotations )     
+#if ( $useAnnotations || $useMaven4Api )
     @Parameter( property = "indentSize", defaultValue = "2" )
 #end
     private int indentSize;
@@ -110,9 +136,9 @@ public class HelpMojo
     private static final int DEFAULT_LINE_LENGTH = 80;
 
     private Document build()
-        throws MojoExecutionException
+        throws ${mojoException}
     {
-        getLog().debug( "load plugin-help.xml: " + PLUGIN_HELP_PATH );
+        ${logger}.debug( "load plugin-help.xml: " + PLUGIN_HELP_PATH );
         try ( InputStream is = getClass().getResourceAsStream( 
PLUGIN_HELP_PATH ) )
         {
             if ( is == null )
@@ -125,15 +151,15 @@ public class HelpMojo
         }
         catch ( IOException e )
         {
-            throw new MojoExecutionException( e.getMessage(), e );
+            throw new ${mojoException}( e.getMessage(), e );
         }
         catch ( ParserConfigurationException e )
         {
-            throw new MojoExecutionException( e.getMessage(), e );
+            throw new ${mojoException}( e.getMessage(), e );
         }
         catch ( SAXException e )
         {
-            throw new MojoExecutionException( e.getMessage(), e );
+            throw new ${mojoException}( e.getMessage(), e );
         }
     }
 
@@ -142,16 +168,16 @@ public class HelpMojo
      */
     @Override
     public void execute()
-        throws MojoExecutionException
+        throws ${mojoException}
     {
         if ( lineLength <= 0 )
         {
-            getLog().warn( "The parameter 'lineLength' should be positive, 
using '80' as default." );
+            ${logger}.warn( "The parameter 'lineLength' should be positive, 
using '80' as default." );
             lineLength = DEFAULT_LINE_LENGTH;
         }
         if ( indentSize <= 0 )
         {
-            getLog().warn( "The parameter 'indentSize' should be positive, 
using '2' as default." );
+            ${logger}.warn( "The parameter 'indentSize' should be positive, 
using '2' as default." );
             indentSize = 2;
         }
 
@@ -200,9 +226,9 @@ public class HelpMojo
             writeGoal( sb, goalPrefix, (Element) mojo );
         }
 
-        if ( getLog().isInfoEnabled() )
+        if ( ${logger}.isInfoEnabled() )
         {
-            getLog().info( sb.toString() );
+            ${logger}.info( sb.toString() );
         }
     }
 
@@ -213,22 +239,22 @@ public class HelpMojo
     }
 
     private static String getValue( Node node, String elementName )
-        throws MojoExecutionException
+        throws ${mojoException}
     {
         return getSingleChild( node, elementName ).getTextContent();
     }
 
     private static Node getSingleChild( Node node, String elementName )
-        throws MojoExecutionException
+        throws ${mojoException}
     {
         List<Node> namedChild = findNamedChild( node, elementName );
         if ( namedChild.isEmpty() )
         {
-            throw new MojoExecutionException( "Could not find " + elementName 
+ " in plugin-help.xml" );
+            throw new ${mojoException}( "Could not find " + elementName + " in 
plugin-help.xml" );
         }
         if ( namedChild.size() > 1 )
         {
-            throw new MojoExecutionException( "Multiple " + elementName + " in 
plugin-help.xml" );
+            throw new ${mojoException}( "Multiple " + elementName + " in 
plugin-help.xml" );
         }
         return namedChild.get( 0 );
     }
@@ -249,7 +275,7 @@ public class HelpMojo
     }
 
     private static Node findSingleChild( Node node, String elementName )
-        throws MojoExecutionException
+        throws ${mojoException}
     {
         List<Node> elementsByTagName = findNamedChild( node, elementName );
         if ( elementsByTagName.isEmpty() )
@@ -258,13 +284,13 @@ public class HelpMojo
         }
         if ( elementsByTagName.size() > 1 )
         {
-            throw new MojoExecutionException( "Multiple " + elementName + "in 
plugin-help.xml" );
+            throw new ${mojoException}( "Multiple " + elementName + "in 
plugin-help.xml" );
         }
         return elementsByTagName.get( 0 );
     }
 
     private void writeGoal( StringBuilder sb, String goalPrefix, Element mojo )
-        throws MojoExecutionException
+        throws ${mojoException}
     {
         String mojoGoal = getValue( mojo, "goal" );
         Node configurationElement = findSingleChild( mojo, "configuration" );
@@ -304,7 +330,7 @@ public class HelpMojo
     }
 
     private void writeParameter( StringBuilder sb, Node parameter, Node 
configurationElement )
-        throws MojoExecutionException
+        throws ${mojoException}
     {
         String parameterName = getValue( parameter, "name" );
         String parameterDescription = getValue( parameter, "description" );
diff --git 
a/maven-plugin-tools-generators/src/test/java/org/apache/maven/tools/plugin/generator/AbstractGeneratorTestCase.java
 
b/maven-plugin-tools-generators/src/test/java/org/apache/maven/tools/plugin/generator/AbstractGeneratorTestCase.java
index c51406d1..f2672437 100644
--- 
a/maven-plugin-tools-generators/src/test/java/org/apache/maven/tools/plugin/generator/AbstractGeneratorTestCase.java
+++ 
b/maven-plugin-tools-generators/src/test/java/org/apache/maven/tools/plugin/generator/AbstractGeneratorTestCase.java
@@ -101,21 +101,11 @@ public abstract class AbstractGeneratorTestCase
         MavenProject mavenProject = new MavenProject();
         mavenProject.setGroupId( "foo" );
         mavenProject.setArtifactId( "bar" );
-        mavenProject.setBuild( new Build()
-        {
-            @Override
-            public String getDirectory()
-            {
-                return basedir + "/target";
-            }
+        Build build = new Build();
+        build.setDirectory( basedir + "/target" );
+        build.setOutputDirectory( basedir + "/target" );
+        mavenProject.setBuild( build );
 
-            @Override
-            public String getOutputDirectory()
-            {
-                return basedir + "/target";
-            }
-        } );
-        extendPluginDescriptor( pluginDescriptor );
         generator.execute( destinationDirectory, new 
DefaultPluginToolsRequest( mavenProject, pluginDescriptor ) );
 
         validate( destinationDirectory );
diff --git a/maven-plugin-tools-java/pom.xml b/maven-plugin-tools-java/pom.xml
index 4fb941b3..e9018d41 100644
--- a/maven-plugin-tools-java/pom.xml
+++ b/maven-plugin-tools-java/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-plugin-tools</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-plugin-tools-java</artifactId>
diff --git 
a/maven-plugin-tools-java/src/test/java/org/apache/maven/tools/plugin/extractor/javadoc/JavaMojoDescriptorExtractorTest.java
 
b/maven-plugin-tools-java/src/test/java/org/apache/maven/tools/plugin/extractor/javadoc/JavaMojoDescriptorExtractorTest.java
index 83bd3bf5..97af4b70 100644
--- 
a/maven-plugin-tools-java/src/test/java/org/apache/maven/tools/plugin/extractor/javadoc/JavaMojoDescriptorExtractorTest.java
+++ 
b/maven-plugin-tools-java/src/test/java/org/apache/maven/tools/plugin/extractor/javadoc/JavaMojoDescriptorExtractorTest.java
@@ -86,14 +86,9 @@ public class JavaMojoDescriptorExtractorTest
         model.setArtifactId( "maven-unitTesting-plugin" );
 
         MavenProject project = new MavenProject( model );
-        project.setBuild( new Build()
-        {
-            @Override
-            public String getDirectory()
-            {
-                return new File( "target" ).getAbsolutePath();
-            }
-        } );
+        Build build = new Build();
+        build.setDirectory( new File( "target" ).getAbsolutePath() );
+        project.setBuild( build );
 
         project.setFile( new File( root, "pom.xml" ) );
         project.addCompileSourceRoot( new File( root, directory ).getPath() );
diff --git a/maven-script/maven-plugin-tools-ant/pom.xml 
b/maven-script/maven-plugin-tools-ant/pom.xml
index f1fc67db..b52a47e0 100644
--- a/maven-script/maven-plugin-tools-ant/pom.xml
+++ b/maven-script/maven-plugin-tools-ant/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-script</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-plugin-tools-ant</artifactId>
diff --git a/maven-script/maven-plugin-tools-beanshell/pom.xml 
b/maven-script/maven-plugin-tools-beanshell/pom.xml
index 6e40d869..6a958aac 100644
--- a/maven-script/maven-plugin-tools-beanshell/pom.xml
+++ b/maven-script/maven-plugin-tools-beanshell/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-script</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-plugin-tools-beanshell</artifactId>
diff --git a/maven-script/maven-plugin-tools-model/pom.xml 
b/maven-script/maven-plugin-tools-model/pom.xml
index 4219c22f..66e754b8 100644
--- a/maven-script/maven-plugin-tools-model/pom.xml
+++ b/maven-script/maven-plugin-tools-model/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-script</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-plugin-tools-model</artifactId>
diff --git a/maven-script/maven-script-ant/pom.xml 
b/maven-script/maven-script-ant/pom.xml
index cbba0e1f..f46d93dc 100644
--- a/maven-script/maven-script-ant/pom.xml
+++ b/maven-script/maven-script-ant/pom.xml
@@ -23,7 +23,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-script</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-script-ant</artifactId>
diff --git 
a/maven-script/maven-script-ant/src/main/java/org/apache/maven/script/ant/AntMojoWrapper.java
 
b/maven-script/maven-script-ant/src/main/java/org/apache/maven/script/ant/AntMojoWrapper.java
index 43c8620e..aef75a44 100644
--- 
a/maven-script/maven-script-ant/src/main/java/org/apache/maven/script/ant/AntMojoWrapper.java
+++ 
b/maven-script/maven-script-ant/src/main/java/org/apache/maven/script/ant/AntMojoWrapper.java
@@ -223,8 +223,7 @@ public class AntMojoWrapper
             if ( mavenProject != null && session != null && pathTranslator != 
null )
             {
                 ExpressionEvaluator exprEvaluator =
-                    new PluginParameterExpressionEvaluator( session, 
mojoExecution, pathTranslator, logger,
-                                                            mavenProject, 
mavenProject.getProperties() );
+                    new PluginParameterExpressionEvaluator( session, 
mojoExecution );
                 
                 PropertyHelper propertyHelper = 
PropertyHelper.getPropertyHelper( antProject );
                 propertyHelper.setNext( new AntPropertyHelper( exprEvaluator, 
mavenProject.getArtifacts(), getLog() ) );
diff --git a/maven-script/maven-script-beanshell/pom.xml 
b/maven-script/maven-script-beanshell/pom.xml
index 9b7267d0..2d113236 100644
--- a/maven-script/maven-script-beanshell/pom.xml
+++ b/maven-script/maven-script-beanshell/pom.xml
@@ -23,7 +23,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-script</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-script-beanshell</artifactId>
diff --git a/maven-script/pom.xml b/maven-script/pom.xml
index 8a73c36c..fc2a5895 100644
--- a/maven-script/pom.xml
+++ b/maven-script/pom.xml
@@ -23,7 +23,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven.plugin-tools</groupId>
     <artifactId>maven-plugin-tools</artifactId>
-    <version>3.7.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-script</artifactId>
diff --git a/pom.xml b/pom.xml
index ebcdf48c..258f22a4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
 
   <groupId>org.apache.maven.plugin-tools</groupId>
   <artifactId>maven-plugin-tools</artifactId>
-  <version>3.7.1-SNAPSHOT</version>
+  <version>4.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Maven Plugin Tools</name>
@@ -94,7 +94,7 @@
   <properties>
     <javaVersion>8</javaVersion>
     <pluginTestingHarnessVersion>3.3.0</pluginTestingHarnessVersion>
-    <mavenVersion>3.2.5</mavenVersion>
+    <mavenVersion>4.0.0-alpha-1-SNAPSHOT</mavenVersion>
     <!-- SLF4J version must match the version exported from the mavenVersion, 
     
https://github.com/apache/maven/blob/12a6b3acb947671f09b81f49094c53f426d8cea1/pom.xml#L63
 -->
     <slf4jVersion>1.7.5</slf4jVersion>
@@ -103,9 +103,10 @@
     <asmVersion>9.4</asmVersion>
     <doxiaVersion>1.11.1</doxiaVersion>
     <doxia-sitetoolsVersion>1.11.1</doxia-sitetoolsVersion>
-    <plexusUtilsVersion>3.4.2</plexusUtilsVersion>
+    <plexusUtilsVersion>4.0.0-alpha-1-SNAPSHOT</plexusUtilsVersion>
     <reportingApiVersion>3.1.1</reportingApiVersion>
     <reportingImplVersion>3.2.0</reportingImplVersion>
+    <surefire.version>3.0.0-M7</surefire.version>
     
<project.build.outputTimestamp>2022-10-20T07:36:59Z</project.build.outputTimestamp>
   </properties>
 
@@ -366,6 +367,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
+          <version>${surefire.version}</version>
           <configuration>
             <trimStackTrace>false</trimStackTrace>
           </configuration>

Reply via email to