You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2022/03/08 10:49:01 UTC

[maven-plugin-tools] branch mvn4 updated: runtime support

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

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


The following commit(s) were added to refs/heads/mvn4 by this push:
     new f664f52  runtime support
f664f52 is described below

commit f664f5209fc52d5194d698a8d3e1a5b77c1b05ca
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Mar 8 11:48:58 2022 +0100

    runtime support
---
 .../JavaAnnotationsMojoDescriptorExtractor.java    | 38 +++++++++++++++++++---
 .../annotations/scanner/MojoAnnotatedClass.java    | 13 ++++++++
 .../scanner/MojoAnnotationsScanner.java            |  8 +++--
 .../scanner/visitors/MojoClassVisitor.java         |  4 +++
 .../maven/tools/plugin/ExtendedMojoDescriptor.java | 14 ++++++++
 .../generator/PluginDescriptorGenerator.java       |  7 ++++
 6 files changed, 78 insertions(+), 6 deletions(-)

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 ca68e32..b2e544a 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
@@ -362,8 +362,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 );
         }
     }
 
@@ -412,8 +426,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 );
         }
     }
 
@@ -505,6 +533,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/MojoAnnotatedClass.java b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/extractor/annotations/scanner/MojoAnnotatedClass.java
index ab5f5b1..9c5e6ee 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 b112ed1..58e4cfc 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,11 +37,15 @@ 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(),
-            "org.apache.maven.api.plugin.annotations.Mojo", "org.apache.maven.api.plugin.annotations.Execute" );
+            V4_API_ANNOTATIONS_PACKAGE + ".Mojo", V4_API_ANNOTATIONS_PACKAGE + ".Execute" );
 
     List<String> FIELD_LEVEL_ANNOTATIONS = Arrays.asList( Parameter.class.getName(), Component.class.getName(),
-            "org.apache.maven.api.plugin.annotations.Parameter", "org.apache.maven.api.plugin.annotations.Component" );
+            V4_API_ANNOTATIONS_PACKAGE + ".Parameter", V4_API_ANNOTATIONS_PACKAGE + ".Component" );
 
     /**
      * Scan classes for mojo annotations.
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 1bf35c7..5a5e616 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
@@ -139,6 +139,10 @@ public class MojoClassVisitor
         {
             return null;
         }
+        if ( annotationClassName.startsWith( MojoAnnotationsScanner.V4_API_ANNOTATIONS_PACKAGE ) )
+        {
+            mojoAnnotatedClass.setV4Api( true );
+        }
         MojoAnnotationVisitor mojoAnnotationVisitor = new MojoAnnotationVisitor( logger, annotationClassName );
         annotationVisitorMap.put( annotationClassName, mojoAnnotationVisitor );
         return mojoAnnotationVisitor;
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 3f82db1..69aff30 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
@@ -32,6 +32,8 @@ public class ExtendedMojoDescriptor
 
     private String requiresDependencyCollection = null;
 
+    private boolean v4Api = false;
+
     @Override
     public boolean isThreadSafe()
     {
@@ -55,4 +57,16 @@ public class ExtendedMojoDescriptor
     {
         this.requiresDependencyCollection = requiresDependencyCollection;
     }
+
+    @Override
+    public boolean isV4Api()
+    {
+        return v4Api;
+    }
+
+    @Override
+    public void setV4Api( boolean v4Api )
+    {
+        this.v4Api = v4Api;
+    }
 }
diff --git a/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorGenerator.java b/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorGenerator.java
index 901412b..8afd940 100644
--- a/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorGenerator.java
+++ b/maven-plugin-tools-generators/src/main/java/org/apache/maven/tools/plugin/generator/PluginDescriptorGenerator.java
@@ -389,6 +389,13 @@ public class PluginDescriptorGenerator
             }
 
             GeneratorUtils.element( w, "threadSafe", String.valueOf( extendedMojoDescriptor.isThreadSafe() ) );
+
+            boolean v4Api = extendedMojoDescriptor.isV4Api();
+            if ( v4Api )
+            {
+                GeneratorUtils.element( w, "v4Api", String.valueOf( v4Api ) );
+            }
+
         }
 
         // ----------------------------------------------------------------------