From 9410a091abd802f24b3096fa5bfa5d5aac8b41d7 Mon Sep 17 00:00:00 2001 From: Corneil du Plessis Date: Mon, 10 Jun 2024 17:39:33 +0200 Subject: [PATCH] Update generator plugin for adding execution to spring-boot-maven-plugin. --- .../SpringCloudStreamAppGeneratorMojo.java | 17 +++++++++-- .../app/plugin/generator/AppDefinition.java | 11 +++++++- .../src/main/resources/template/app-pom.xml | 21 +++++++++++--- .../dataflow/app/plugin/MojoHarnessTest.java | 20 ++++++++++++- ...SpringCloudStreamAppGeneratorMojoTest.java | 28 +++++++++++-------- .../resources/unit/http-source-apps/pom.xml | 19 ++++++++++++- 6 files changed, 94 insertions(+), 22 deletions(-) diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojo.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojo.java index ecd80e2d3..9c7d81bdb 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojo.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojo.java @@ -129,6 +129,9 @@ public void execute() throws MojoFailureException, MojoExecutionException { this.global.getApplication().getFunctionDefinition() : this.application.getFunctionDefinition(); app.setFunctionDefinition(applicationFunctionDefinition); //TODO is applicationFunctionDefinition required? + app.setBootPluginConfiguration(this.application.getBootPluginConfiguration()); + app.setBootExecution(this.application.getBootExecution()); + String metadataMavenPluginVersion = StringUtils.isEmpty(this.application.getMetadata().getMavenPluginVersion()) ? this.global.getApplication().getMetadata().getMavenPluginVersion() : this.application.getMetadata().getMavenPluginVersion(); if (StringUtils.isEmpty(metadataMavenPluginVersion)) { @@ -306,8 +309,6 @@ else if (StringUtils.hasText(this.global.getApplication().getContainerImage().ge }) .collect(Collectors.toList()); - app.setBootPluginConfiguration(this.application.getBootPluginConfiguration()); - // ---------------------------------------------------------------------------------------------------------- // Project Generator // ---------------------------------------------------------------------------------------------------------- @@ -465,6 +466,7 @@ public static class Application { private final Maven maven = new Maven(); private String bootPluginConfiguration; + private String bootExecution; public String getBootPluginConfiguration() { return bootPluginConfiguration; @@ -474,6 +476,15 @@ public void setBootPluginConfiguration(String bootPluginConfiguration) { this.bootPluginConfiguration = bootPluginConfiguration; } + public String getBootExecution() { + return bootExecution; + } + + public void setBootExecution(String bootExecution) { + System.out.println(getClass() + ".bootExecution=" + bootExecution); + this.bootExecution = bootExecution; + } + public Map getProperties() { return properties; } @@ -631,7 +642,7 @@ public static class ContainerImage { /** * Base images to be used by the target container image. */ - private String baseImage; + private String baseImage = "${project.artifactId}"; /** * Enable or disable the inclusion of application's metadata into the image's labels. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/AppDefinition.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/AppDefinition.java index ae33ec9d3..879bf2532 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/AppDefinition.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/AppDefinition.java @@ -87,9 +87,18 @@ public class AppDefinition { * Application metadata related configurations to be applied for this App definition. */ private final Metadata metadata = new Metadata(); - + private String bootExecution; private String bootPluginConfiguration; + public String getBootExecution() { + return bootExecution; + } + + public void setBootExecution(String bootExecution) { + System.out.println(getClass() + ".bootExecution=" + bootExecution); + this.bootExecution = bootExecution; + } + public String getBootPluginConfiguration() { return bootPluginConfiguration; } diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/app-pom.xml b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/app-pom.xml index 3c85acf24..5a70325ca 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/app-pom.xml +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/app-pom.xml @@ -138,16 +138,26 @@ org.springframework.boot spring-boot-maven-plugin + {{#app.bootExecution}} + + + + {{this}} + + + {{/app.bootExecution}} - - {{app.containerImage.orgName}}/${project.artifactId}:{{app.containerImage.tag}} - {{#app.bootPluginConfiguration}} - {{this}} + + {{this}} {{/app.bootPluginConfiguration}} + + {{app.containerImage.orgName}}/{{app.containerImage.baseImage}}:{{app.containerImage.tag}} + {{#app.containerImage.enableMetadata}} + org.codehaus.mojo properties-maven-plugin @@ -176,15 +186,18 @@ {{app.metadata.mavenPluginVersion}} {{#app.containerImage.enableMetadata}} + true {{#app.metadataNameFilters}} + {{this}} {{/app.metadataNameFilters}} {{#app.metadata.sourceTypeFilters}} + {{this}} {{/app.metadata.sourceTypeFilters}} diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MojoHarnessTest.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MojoHarnessTest.java index 6f2b9b80f..1d703f514 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MojoHarnessTest.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MojoHarnessTest.java @@ -49,6 +49,18 @@ public class MojoHarnessTest { @Rule public MojoRule mojoRule = new MojoRule(); + // @Before +// public void before() { +// setMojoProperty("generatedProjectHome", projectHome.getRoot().getAbsolutePath()); +// } +// private SpringCloudStreamAppGeneratorMojo springCloudStreamAppMojo = new SpringCloudStreamAppGeneratorMojo(); +// +// private Class mojoClazz = springCloudStreamAppMojo.getClass(); +// private void setMojoProperty(String propertyName, Object value) throws NoSuchFieldException { +// Field mojoProperty = mojoClazz.getDeclaredField(propertyName); +// mojoProperty.setAccessible(true); +// ReflectionUtils.setField(mojoProperty, springCloudStreamAppMojo, value); +// } @Test public void testSomething() throws Exception { @@ -106,8 +118,14 @@ public void testSomething() throws Exception { assertThat(springBootPlugin.getConfiguration().toString()).containsPattern("\\\\s*" + "\\.+/\\$\\{project.artifactId\\}:\\d+\\.\\d+\\.\\d+.*\\\\s*" + "\\"); - assertThat(pomModel.getRepositories().size()).isEqualTo(5); + List executions = springBootPlugin.getExecutions().stream().map(pluginExecution -> pluginExecution.getId() + ":" + pluginExecution.getPhase() + ":" + pluginExecution.getGoals()).collect(Collectors.toList()); + assertThat(executions).as("Exepcted executions").isNotEmpty(); + assertThat(executions.toString()).contains("process-aot"); + + assertThat(springBootPlugin.getConfiguration().toString()).contains("requiresUnpack"); + + assertThat(pomModel.getRepositories().size()).isEqualTo(5); assertThat(pomModel.getRepositories().stream().map(r -> r.getId()).collect(Collectors.toList())) .contains("bintray-global", "bintray-application", "bintray-binder"); } diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java index 4fa47d2f9..9433bd187 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java @@ -85,7 +85,7 @@ public void before() throws NoSuchFieldException { // BOM application.setBootVersion("3.3.0"); - application.getMetadata().setMavenPluginVersion("1.0.2.BUILD-SNAPSHOT"); + application.getMetadata().setMavenPluginVersion("1.1.0-SNAPSHOT"); setMojoProperty("application", application); @@ -142,23 +142,27 @@ public void testDefaultProjectCreationByPlugin() throws Exception { } @Test - public void testCustomBootMavenPluginConfiguration() throws Exception { - application.setBootPluginConfiguration("\n" + - " \n" + - " org.python\n" + - " jython-standalone\n" + - " \n" + - " \n" + - " ]]>"); - + public void testCustomBootMavenExecutionsAndPluginConfiguration() throws Exception { + application.setBootPluginConfiguration("" + + "" + + "org.python" + + "jython-standalone" + + "" + + ""); + application.setBootExecution("process-aot" + + "" + + "process-aot" + + ""); springCloudStreamAppMojo.execute(); Model pomModel = getModel(new File(projectHome.getRoot().getAbsolutePath())); List plugins = pomModel.getBuild().getPlugins(); final Optional bootPlugin = plugins.stream().filter(p -> p.getArtifactId().equals("spring-boot-maven-plugin")).findFirst(); assertThat(bootPlugin.isPresent()).isTrue(); - + assertThat(bootPlugin.get().getConfiguration().toString()).contains("requiresUnpack"); + assertThat(bootPlugin.get().getExecutions()).as("Expected executions").isNotEmpty(); + assertThat(bootPlugin.get().getExecutions().get(0).getGoals()).as("Expected goals").isNotEmpty(); + assertThat(bootPlugin.get().getExecutions().get(0).getGoals().get(0)).isEqualTo("process-aot"); } private void assertGeneratedPomXml(File rootPath) { diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml index 20bc385a5..4cc05a73e 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml @@ -229,7 +229,24 @@ ${project.version} io.pivotal.java.function.http.supplier.HttpSupplierConfiguration.class org.springframework.cloud.stream.app.test - + + process-aot + + process-aot + + ]]> + + + + + org.python + jython-standalone + + + ]]> + reactive false