You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/11/30 20:30:57 UTC

[camel] 06/10: CAMEL-17250: camel-component-maven-plugin - Add option to easily configure the output directory

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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e2b9a956c0b07ba64009d478a851672c96cca7e3
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Nov 30 18:28:18 2021 +0100

    CAMEL-17250: camel-component-maven-plugin - Add option to easily configure the output directory
---
 .../maven/component/GenerateComponentMojo.java     | 40 ++++++++++++++++++----
 .../maven/packaging/AbstractGenerateMojo.java      | 21 +++++++++++-
 2 files changed, 53 insertions(+), 8 deletions(-)

diff --git a/tooling/maven/camel-component-maven-plugin/src/main/java/org/apache/camel/maven/component/GenerateComponentMojo.java b/tooling/maven/camel-component-maven-plugin/src/main/java/org/apache/camel/maven/component/GenerateComponentMojo.java
index b497c0e..16e4d20 100644
--- a/tooling/maven/camel-component-maven-plugin/src/main/java/org/apache/camel/maven/component/GenerateComponentMojo.java
+++ b/tooling/maven/camel-component-maven-plugin/src/main/java/org/apache/camel/maven/component/GenerateComponentMojo.java
@@ -16,6 +16,10 @@
  */
 package org.apache.camel.maven.component;
 
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.camel.maven.packaging.AbstractGenerateMojo;
 import org.apache.camel.maven.packaging.EndpointSchemaGeneratorMojo;
 import org.apache.camel.maven.packaging.GenerateConfigurerMojo;
@@ -42,8 +46,21 @@ import org.sonatype.plexus.build.incremental.BuildContext;
       defaultPhase = LifecyclePhase.PROCESS_CLASSES)
 public class GenerateComponentMojo extends AbstractGenerateMojo {
 
+    /**
+     * The output directory for generated java source code
+     */
+    @Parameter(defaultValue = "${project.basedir}/src/generated/java")
+    protected File sourcesOutputDir;
+
+    /**
+     * The output directory for generated resource source code
+     */
+    @Parameter(defaultValue = "${project.basedir}/src/generated/resources")
+    protected File resourcesOutputDir;
+
     @Parameter(property = "project", required = true, readonly = true)
     protected MavenProject currentProject;
+
     @Component
     protected MavenProjectHelper currentProjectHelper;
     @Component
@@ -63,19 +80,28 @@ public class GenerateComponentMojo extends AbstractGenerateMojo {
         // do not sync pom file for this goal as we are standalone
         project.setContextValue("syncPomFile", "false");
 
+        Map<String, Object> parameters = new HashMap<>();
+        if (sourcesOutputDir != null) {
+            parameters.put("sourcesOutputDir", sourcesOutputDir);
+        }
+        if (resourcesOutputDir != null) {
+            parameters.put("resourcesOutputDir", resourcesOutputDir);
+        }
+
         // jandex
-        invoke(PackageJandexMojo.class);
+        invoke(PackageJandexMojo.class, parameters);
         // generate-type-converter-loader
-        invoke(TypeConverterLoaderGeneratorMojo.class);
+        invoke(TypeConverterLoaderGeneratorMojo.class, parameters);
         // generate-spi
-        invoke(SpiGeneratorMojo.class);
+        invoke(SpiGeneratorMojo.class, parameters);
         // generate-configurer
-        invoke(GenerateConfigurerMojo.class);
+        invoke(GenerateConfigurerMojo.class, parameters);
         // generate-endpoint-schema
-        invoke(EndpointSchemaGeneratorMojo.class);
+        invoke(EndpointSchemaGeneratorMojo.class, parameters);
         // prepare-components
-        invoke(PrepareComponentMojo.class);
+        invoke(PrepareComponentMojo.class, parameters);
         // validate-components
-        invoke(ValidateComponentMojo.class);
+        invoke(ValidateComponentMojo.class, parameters);
     }
+
 }
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateMojo.java
index abb5ff3..e6b0a67 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateMojo.java
@@ -24,11 +24,13 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.zip.ZipFile;
 
+import org.apache.camel.tooling.util.ReflectionHelper;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
@@ -68,10 +70,27 @@ public abstract class AbstractGenerateMojo extends AbstractMojo {
     protected abstract void doExecute() throws MojoFailureException, MojoExecutionException;
 
     protected void invoke(Class<? extends AbstractMojo> mojoClass) throws MojoExecutionException, MojoFailureException {
+        invoke(mojoClass, null);
+    }
+
+    protected void invoke(Class<? extends AbstractMojo> mojoClass, Map<String, Object> parameters)
+            throws MojoExecutionException, MojoFailureException {
         try {
-            AbstractMojo mojo = mojoClass.newInstance();
+            AbstractMojo mojo = mojoClass.getDeclaredConstructor().newInstance();
             mojo.setLog(getLog());
             mojo.setPluginContext(getPluginContext());
+
+            // set options using reflections
+            if (parameters != null && !parameters.isEmpty()) {
+                ReflectionHelper.doWithFields(mojoClass, field -> {
+                    for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+                        if (field.getName().equals(entry.getKey())) {
+                            ReflectionHelper.setField(field, mojo, entry.getValue());
+                        }
+                    }
+                });
+            }
+
             ((AbstractGeneratorMojo) mojo).execute(project, projectHelper, buildContext);
 
         } catch (MojoExecutionException | MojoFailureException e) {