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) {