You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2023/07/05 11:48:52 UTC

[uima-uimafit] branch feature/229-Add-skipDuringIncrementalBuild-option-to-enhance-goal created (now 67d663f)

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

rec pushed a change to branch feature/229-Add-skipDuringIncrementalBuild-option-to-enhance-goal
in repository https://gitbox.apache.org/repos/asf/uima-uimafit.git


      at 67d663f  #229 - Add skipDuringIncrementalBuild option to enhance goal #228 - Add skip parameter

This branch includes the following new commits:

     new 67d663f  #229 - Add skipDuringIncrementalBuild option to enhance goal #228 - Add skip parameter

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[uima-uimafit] 01/01: #229 - Add skipDuringIncrementalBuild option to enhance goal #228 - Add skip parameter

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rec pushed a commit to branch feature/229-Add-skipDuringIncrementalBuild-option-to-enhance-goal
in repository https://gitbox.apache.org/repos/asf/uima-uimafit.git

commit 67d663f1d52a75de4b6131cf893b1abe489a73db
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Wed Jul 5 13:48:47 2023 +0200

    #229 - Add skipDuringIncrementalBuild option to enhance goal
    #228 - Add skip parameter
    
    - Added skip and skipDuringIncrementalBuild options to both the enhance and generate goals
---
 .../org/apache/uima/fit/maven/EnhanceMojo.java     | 108 +++++++++++++--------
 .../uima/fit/maven/GenerateDescriptorsMojo.java    |  91 ++++++++++-------
 2 files changed, 128 insertions(+), 71 deletions(-)

diff --git a/uimafit-maven-plugin/src/main/java/org/apache/uima/fit/maven/EnhanceMojo.java b/uimafit-maven-plugin/src/main/java/org/apache/uima/fit/maven/EnhanceMojo.java
index 09b0dc9..1279170 100644
--- a/uimafit-maven-plugin/src/main/java/org/apache/uima/fit/maven/EnhanceMojo.java
+++ b/uimafit-maven-plugin/src/main/java/org/apache/uima/fit/maven/EnhanceMojo.java
@@ -173,6 +173,18 @@ public class EnhanceMojo extends AbstractMojo {
   @Parameter(defaultValue = "compile", required = true)
   private String includeScope;
 
+  /**
+   * Skip plugin execution.
+   */
+  @Parameter(property = "uima-enhance.skip", defaultValue = "false", required = true)
+  private boolean skip;
+
+  /**
+   * Skip plugin execution only during incremental builds (e.g. triggered from m2e).
+   */
+  @Parameter(defaultValue = "false", required = true)
+  private boolean skipDuringIncrementalBuilds;
+
   /**
    * Start of a line containing a class name in the missing meta data report file
    */
@@ -185,9 +197,13 @@ public class EnhanceMojo extends AbstractMojo {
 
   @Override
   public void execute() throws MojoExecutionException, MojoFailureException {
+    if (isSkipped()) {
+      return;
+    }
+
     // Get the compiled classes from this project
     String[] files = FileUtils.getFilesFromExtension(project.getBuild().getOutputDirectory(),
-        new String[] { "class" });
+            new String[] { "class" });
     componentLoader = Util.getClassloader(project, getLog(), includeScope);
 
     // Set up class pool with all the project dependencies and the project classes themselves
@@ -199,7 +215,7 @@ public class EnhanceMojo extends AbstractMojo {
 
     // Determine where to write the missing meta data report file
     File reportFile = new File(project.getBuild().getDirectory(),
-        "uimafit-missing-meta-data-report.txt");
+            "uimafit-missing-meta-data-report.txt");
 
     // Read existing report
     if (generateMissingMetaDataReport) {
@@ -251,7 +267,7 @@ public class EnhanceMojo extends AbstractMojo {
         ctClazz = classPool.get(clazzName);
       } catch (NotFoundException e) {
         throw new MojoExecutionException(
-            "Class [" + clazzName + "] not found in class pool: " + getRootCauseMessage(e), e);
+                "Class [" + clazzName + "] not found in class pool: " + getRootCauseMessage(e), e);
       }
 
       // Get the source file
@@ -289,15 +305,17 @@ public class EnhanceMojo extends AbstractMojo {
         }
       } catch (IOException e) {
         throw new MojoExecutionException(
-            "Enhanced class [" + clazzName + "] cannot be written: " + getRootCauseMessage(e), e);
+                "Enhanced class [" + clazzName + "] cannot be written: " + getRootCauseMessage(e),
+                e);
       } catch (CannotCompileException e) {
         throw new MojoExecutionException(
-            "Enhanced class [" + clazzName + "] cannot be compiled: " + getRootCauseMessage(e), e);
+                "Enhanced class [" + clazzName + "] cannot be compiled: " + getRootCauseMessage(e),
+                e);
       }
     }
 
     getLog().info("Enhanced " + countEnhanced + " class" + (countEnhanced != 1 ? "es" : "") + " ("
-        + countAlreadyEnhanced + " already enhanced).");
+            + countAlreadyEnhanced + " already enhanced).");
 
     if (generateMissingMetaDataReport) {
       // Remove any classes from the report that are no longer part of the build
@@ -310,11 +328,25 @@ public class EnhanceMojo extends AbstractMojo {
 
       if (failOnMissingMetaData && !reportData.isEmpty()) {
         throw new MojoFailureException("Component meta data missing. A report of the missing "
-            + "meta data can be found in " + reportFile);
+                + "meta data can be found in " + reportFile);
       }
     }
   }
 
+  private boolean isSkipped() {
+    if (skipDuringIncrementalBuilds && buildContext.isIncremental()) {
+      getLog().info("Enhancement of UIMA component classes skipped in incremental build.");
+      return true;
+    }
+
+    if (skip) {
+      getLog().info("Enhancement of UIMA component classes skipped.");
+      return true;
+    }
+
+    return false;
+  }
+
   /**
    * Add the EnhancedClassFile annotation.
    */
@@ -323,7 +355,7 @@ public class EnhanceMojo extends AbstractMojo {
     ConstPool constPool = classFile.getConstPool();
 
     AnnotationsAttribute annoAttr = (AnnotationsAttribute) classFile
-        .getAttribute(AnnotationsAttribute.visibleTag);
+            .getAttribute(AnnotationsAttribute.visibleTag);
 
     // Create annotation attribute if it does not exist
     if (annoAttr == null) {
@@ -344,12 +376,12 @@ public class EnhanceMojo extends AbstractMojo {
    * Enhance resource meta data
    */
   private void enhanceResourceMetaData(JavaSource aAST, Class<?> aClazz, CtClass aCtClazz,
-      Multimap<String, String> aReportData) {
+          Multimap<String, String> aReportData) {
     ClassFile classFile = aCtClazz.getClassFile();
     ConstPool constPool = classFile.getConstPool();
 
     AnnotationsAttribute annoAttr = (AnnotationsAttribute) classFile
-        .getAttribute(AnnotationsAttribute.visibleTag);
+            .getAttribute(AnnotationsAttribute.visibleTag);
 
     // Create annotation attribute if it does not exist
     if (annoAttr == null) {
@@ -362,25 +394,25 @@ public class EnhanceMojo extends AbstractMojo {
       a = new Annotation(ResourceMetaData.class.getName(), constPool);
       // Add a name, otherwise there will be none in the generated descriptor.
       a.addMemberValue("name",
-          new StringMemberValue(ResourceMetaDataFactory.getDefaultName(aClazz), constPool));
+              new StringMemberValue(ResourceMetaDataFactory.getDefaultName(aClazz), constPool));
     }
 
     // Update description from JavaDoc
     String doc = Util.getComponentDocumentation(aAST, aClazz.getName());
     enhanceMemberValue(a, "description", doc, overrideComponentDescription,
-        ResourceMetaDataFactory.getDefaultDescription(aClazz), constPool, aReportData, aClazz);
+            ResourceMetaDataFactory.getDefaultDescription(aClazz), constPool, aReportData, aClazz);
 
     // Update version
     enhanceMemberValue(a, "version", componentVersion, overrideComponentVersion,
-        ResourceMetaDataFactory.getDefaultVersion(aClazz), constPool, aReportData, aClazz);
+            ResourceMetaDataFactory.getDefaultVersion(aClazz), constPool, aReportData, aClazz);
 
     // Update vendor
     enhanceMemberValue(a, "vendor", componentVendor, overrideComponentVendor,
-        ResourceMetaDataFactory.getDefaultVendor(aClazz), constPool, aReportData, aClazz);
+            ResourceMetaDataFactory.getDefaultVendor(aClazz), constPool, aReportData, aClazz);
 
     // Update copyright
     enhanceMemberValue(a, "copyright", componentCopyright, overrideComponentCopyright,
-        ResourceMetaDataFactory.getDefaultCopyright(aClazz), constPool, aReportData, aClazz);
+            ResourceMetaDataFactory.getDefaultCopyright(aClazz), constPool, aReportData, aClazz);
 
     // Replace annotation
     annoAttr.addAnnotation(a);
@@ -402,12 +434,11 @@ public class EnhanceMojo extends AbstractMojo {
    * @param aOverride
    *          set value even if it is already set
    * @param aDefault
-   *          default value set by uimaFIT - if the member has this value, it is considered
-   *          unset
+   *          default value set by uimaFIT - if the member has this value, it is considered unset
    */
   private void enhanceMemberValue(Annotation aAnnotation, String aName, String aNewValue,
-      boolean aOverride, String aDefault, ConstPool aConstPool,
-      Multimap<String, String> aReportData, Class<?> aClazz) {
+          boolean aOverride, String aDefault, ConstPool aConstPool,
+          Multimap<String, String> aReportData, Class<?> aClazz) {
     String value = getStringMemberValue(aAnnotation, aName);
     boolean isEmpty = value.length() == 0;
     boolean isDefault = value.equals(aDefault);
@@ -438,12 +469,12 @@ public class EnhanceMojo extends AbstractMojo {
    * Enhance descriptions in configuration parameters.
    */
   private void enhanceConfigurationParameter(JavaSource aAST, Class<?> aClazz, CtClass aCtClazz,
-      Multimap<String, String> aReportData) throws MojoExecutionException {
+          Multimap<String, String> aReportData) throws MojoExecutionException {
     // Get the parameter name constants
     Map<String, String> parameterNameFields = getParameterConstants(aClazz,
-        parameterNameConstantPrefixes);
+            parameterNameConstantPrefixes);
     Map<String, String> resourceNameFields = getParameterConstants(aClazz,
-        externalResourceNameConstantPrefixes);
+            externalResourceNameConstantPrefixes);
 
     // Fetch configuration parameters from the @ConfigurationParameter annotations in the
     // compiled class. We only need the fields in the class itself. Superclasses should be
@@ -460,7 +491,7 @@ public class EnhanceMojo extends AbstractMojo {
         pname = ConfigurationParameterFactory.createPrimitiveParameter(field).getName();
         // Extract JavaDoc for this resource from the source file
         pdesc = Util.getParameterDocumentation(aAST, field.getName(),
-            parameterNameFields.get(pname));
+                parameterNameFields.get(pname));
       }
 
       // Is this an external resource?
@@ -470,7 +501,7 @@ public class EnhanceMojo extends AbstractMojo {
         pname = ExternalResourceFactory.createResourceDependency(field).getKey();
         // Extract JavaDoc for this resource from the source file
         pdesc = Util.getParameterDocumentation(aAST, field.getName(),
-            resourceNameFields.get(pname));
+                resourceNameFields.get(pname));
       } else {
         continue;
       }
@@ -486,7 +517,7 @@ public class EnhanceMojo extends AbstractMojo {
       try {
         CtField ctField = aCtClazz.getField(field.getName());
         AnnotationsAttribute annoAttr = (AnnotationsAttribute) ctField.getFieldInfo()
-            .getAttribute(AnnotationsAttribute.visibleTag);
+                .getAttribute(AnnotationsAttribute.visibleTag);
 
         // Locate and update annotation
         if (annoAttr != null) {
@@ -495,14 +526,14 @@ public class EnhanceMojo extends AbstractMojo {
           // Update existing annotation
           for (Annotation a : annotations) {
             if (a.getTypeName()
-                .equals(org.apache.uima.fit.descriptor.ConfigurationParameter.class.getName())
-                || a.getTypeName()
-                    .equals(org.apache.uima.fit.descriptor.ExternalResource.class.getName())
-                || a.getTypeName().equals("org.uimafit.descriptor.ConfigurationParameter")
-                || a.getTypeName().equals("org.uimafit.descriptor.ExternalResource")) {
+                    .equals(org.apache.uima.fit.descriptor.ConfigurationParameter.class.getName())
+                    || a.getTypeName()
+                            .equals(org.apache.uima.fit.descriptor.ExternalResource.class.getName())
+                    || a.getTypeName().equals("org.uimafit.descriptor.ConfigurationParameter")
+                    || a.getTypeName().equals("org.uimafit.descriptor.ExternalResource")) {
               if (a.getMemberValue("description") == null) {
                 a.addMemberValue("description",
-                    new StringMemberValue(pdesc, aCtClazz.getClassFile().getConstPool()));
+                        new StringMemberValue(pdesc, aCtClazz.getClassFile().getConstPool()));
                 getLog().debug("Enhanced description of " + type + " [" + pname + "]");
                 // Replace updated annotation
                 annoAttr.addAnnotation(a);
@@ -520,7 +551,7 @@ public class EnhanceMojo extends AbstractMojo {
         ctField.getFieldInfo().addAttribute(annoAttr);
       } catch (NotFoundException e) {
         throw new MojoExecutionException("Field [" + field.getName() + "] not found in byte code: "
-            + ExceptionUtils.getRootCauseMessage(e), e);
+                + ExceptionUtils.getRootCauseMessage(e), e);
       }
     }
   }
@@ -552,7 +583,7 @@ public class EnhanceMojo extends AbstractMojo {
         result.put(parameterName, f.getName());
       } catch (IllegalAccessException e) {
         getLog().warn("Unable to access name constant field [" + f.getName() + "]: "
-            + ExceptionUtils.getRootCauseMessage(e), e);
+                + ExceptionUtils.getRootCauseMessage(e), e);
       }
     }
     return result;
@@ -563,7 +594,7 @@ public class EnhanceMojo extends AbstractMojo {
       return Util.parseSource(aSourceFile, encoding);
     } catch (IOException e) {
       throw new MojoExecutionException("Unable to parse source file [" + aSourceFile + "]: "
-          + ExceptionUtils.getRootCauseMessage(e), e);
+              + ExceptionUtils.getRootCauseMessage(e), e);
     }
   }
 
@@ -589,7 +620,7 @@ public class EnhanceMojo extends AbstractMojo {
    * Write a report on any meta data missing from components.
    */
   private void writeMissingMetaDataReport(File aReportFile, Multimap<String, String> aReportData)
-      throws MojoExecutionException {
+          throws MojoExecutionException {
     String[] classes = aReportData.keySet().toArray(new String[aReportData.keySet().size()]);
     Arrays.sort(classes);
 
@@ -616,7 +647,7 @@ public class EnhanceMojo extends AbstractMojo {
       }
     } catch (IOException e) {
       throw new MojoExecutionException("Unable to write missing meta data report to [" + aReportFile
-          + "]" + ExceptionUtils.getRootCauseMessage(e), e);
+              + "]" + ExceptionUtils.getRootCauseMessage(e), e);
     } finally {
       IOUtils.closeQuietly(out);
     }
@@ -626,7 +657,7 @@ public class EnhanceMojo extends AbstractMojo {
    * Read the missing meta data report from a previous run.
    */
   private void readMissingMetaDataReport(File aReportFile, Multimap<String, String> aReportData)
-      throws MojoExecutionException {
+          throws MojoExecutionException {
     if (!aReportFile.exists()) {
       // Ignore if the file is missing
       return;
@@ -657,7 +688,8 @@ public class EnhanceMojo extends AbstractMojo {
       }
     } catch (IOException e) {
       throw new MojoExecutionException(
-          "Unable to read missing meta data report: " + ExceptionUtils.getRootCauseMessage(e), e);
+              "Unable to read missing meta data report: " + ExceptionUtils.getRootCauseMessage(e),
+              e);
     } finally {
       LineIterator.closeQuietly(i);
     }
diff --git a/uimafit-maven-plugin/src/main/java/org/apache/uima/fit/maven/GenerateDescriptorsMojo.java b/uimafit-maven-plugin/src/main/java/org/apache/uima/fit/maven/GenerateDescriptorsMojo.java
index 48460a6..702581f 100644
--- a/uimafit-maven-plugin/src/main/java/org/apache/uima/fit/maven/GenerateDescriptorsMojo.java
+++ b/uimafit-maven-plugin/src/main/java/org/apache/uima/fit/maven/GenerateDescriptorsMojo.java
@@ -31,7 +31,6 @@ import java.lang.reflect.Modifier;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.maven.model.Resource;
 import org.apache.maven.plugin.AbstractMojo;
@@ -96,6 +95,18 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
   @Parameter(defaultValue = "true", required = true)
   private boolean failOnError;
 
+  /**
+   * Skip plugin execution.
+   */
+  @Parameter(property = "uima-generate.skip", defaultValue = "false", required = true)
+  private boolean skip;
+
+  /**
+   * Skip plugin execution only during incremental builds (e.g. triggered from m2e).
+   */
+  @Parameter(defaultValue = "false", required = true)
+  private boolean skipDuringIncrementalBuilds;
+
   enum TypeSystemSerialization {
     NONE, EMBEDDED
   }
@@ -116,6 +127,10 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
 
   @Override
   public void execute() throws MojoExecutionException {
+    if (isSkipped()) {
+      return;
+    }
+
     // add the generated sources to the build
     if (!outputDirectory.exists()) {
       outputDirectory.mkdirs();
@@ -124,7 +139,7 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
 
     // Get the compiled classes from this project
     String[] files = FileUtils.getFilesFromExtension(project.getBuild().getOutputDirectory(),
-        new String[] { "class" });
+            new String[] { "class" });
 
     componentLoader = Util.getClassloader(project, getLog(), includeScope);
 
@@ -152,27 +167,27 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
         ResourceCreationSpecifier desc = null;
         ProcessingResourceMetaData metadata = null;
         switch (Util.getType(componentLoader, clazz)) {
-        case ANALYSIS_ENGINE:
-          AnalysisEngineDescription aeDesc = createEngineDescription(clazz);
-          metadata = aeDesc.getAnalysisEngineMetaData();
-          desc = aeDesc;
-          break;
-        case COLLECTION_READER:
-          CollectionReaderDescription crDesc = createReaderDescription(clazz);
-          metadata = crDesc.getCollectionReaderMetaData();
-          desc = crDesc;
-        default:
-          // Do nothing
+          case ANALYSIS_ENGINE:
+            AnalysisEngineDescription aeDesc = createEngineDescription(clazz);
+            metadata = aeDesc.getAnalysisEngineMetaData();
+            desc = aeDesc;
+            break;
+          case COLLECTION_READER:
+            CollectionReaderDescription crDesc = createReaderDescription(clazz);
+            metadata = crDesc.getCollectionReaderMetaData();
+            desc = crDesc;
+          default:
+            // Do nothing
         }
 
         if (desc != null) {
           switch (addTypeSystemDescriptions) {
-          case EMBEDDED:
-            embedTypeSystems(metadata);
-            break;
-          case NONE: // fall-through
-          default:
-            // Do nothing
+            case EMBEDDED:
+              embedTypeSystems(metadata);
+              break;
+            case NONE: // fall-through
+            default:
+              // Do nothing
           }
 
           File out = new File(outputDirectory, clazzPath + ".xml");
@@ -196,8 +211,8 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
       }
     }
 
-    getLog()
-        .info("Generated " + countGenerated + " descriptor" + (countGenerated != 1 ? "s." : "."));
+    getLog().info(
+            "Generated " + countGenerated + " descriptor" + (countGenerated != 1 ? "s." : "."));
 
     // Write META-INF/org.apache.uima.fit/components.txt unless skipped and unless there are no
     // components
@@ -208,16 +223,16 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
         FileUtils.fileWrite(path.getPath(), encoding, componentsManifest.toString());
       } catch (IOException e) {
         handleError("Cannot write components manifest to [" + path + "]"
-            + ExceptionUtils.getRootCauseMessage(e), e);
+                + ExceptionUtils.getRootCauseMessage(e), e);
       }
     }
 
     if (addOutputDirectoryAsResourceDirectory && countGenerated > 0) {
       Path absoluteDescriptorOutputPath = outputDirectory.toPath().toAbsolutePath();
       Path absoluteBuildOutputDirectory = Paths.get(project.getBuild().getOutputDirectory())
-          .toAbsolutePath();
+              .toAbsolutePath();
       Path absoluteBuildTestOutputDirectory = Paths.get(project.getBuild().getTestOutputDirectory())
-          .toAbsolutePath();
+              .toAbsolutePath();
 
       // Add the output folder as a new resource folder if any descriptors were generated and
       // only
@@ -226,7 +241,7 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
       // be the case if the mojo is executed in a late build phase where the resources plugin
       // doesn't run anymore.
       if (!absoluteBuildOutputDirectory.equals(absoluteDescriptorOutputPath)
-          && !absoluteBuildTestOutputDirectory.equals(absoluteDescriptorOutputPath)) {
+              && !absoluteBuildTestOutputDirectory.equals(absoluteDescriptorOutputPath)) {
         Resource resource = new Resource();
         resource.setDirectory(outputDirectory.getPath());
         resource.setFiltering(false);
@@ -236,6 +251,20 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
     }
   }
 
+  private boolean isSkipped() {
+    if (skipDuringIncrementalBuilds && buildContext.isIncremental()) {
+      getLog().info("Generation of UIMA component descriptors skipped in incremental build.");
+      return true;
+    }
+
+    if (skip) {
+      getLog().info("Generation of UIMA component descriptors skipped.");
+      return true;
+    }
+
+    return false;
+  }
+
   private void handleError(String message, Exception e) throws MojoExecutionException {
     if (failOnError) {
       throw new MojoExecutionException(message, e);
@@ -245,7 +274,7 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
   }
 
   private void embedTypeSystems(ProcessingResourceMetaData metadata)
-      throws ResourceInitializationException {
+          throws ResourceInitializationException {
     TypeSystemDescriptionFactory.forceTypeDescriptorsScan();
     TypeSystemDescription tsDesc = TypeSystemDescriptionFactory.createTypeSystemDescription();
     metadata.setTypeSystem(tsDesc);
@@ -255,14 +284,10 @@ public class GenerateDescriptorsMojo extends AbstractMojo {
    * Save descriptor XML to file system.
    */
   private void toXML(ResourceSpecifier aDesc, String aFilename) throws SAXException, IOException {
-    OutputStream os = null;
-    try {
-      File out = new File(aFilename);
-      getLog().debug("Writing descriptor to: " + out);
-      os = new FileOutputStream(out);
+    File out = new File(aFilename);
+    getLog().debug("Writing descriptor to: " + out);
+    try (OutputStream os = new FileOutputStream(out);) {
       aDesc.toXML(os);
-    } finally {
-      IOUtils.closeQuietly(os);
     }
   }
 }