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 <claus.ib...@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) {