diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildSettings.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildSettings.java index 1d02f3c9..89a0ef4a 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildSettings.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildSettings.java @@ -53,6 +53,8 @@ public class MavenBuildSettings extends BuildSettings { private final String testSourceDirectory; + private final String defaultGoal; + protected MavenBuildSettings(Builder builder) { super(builder); this.parent = builder.parent; @@ -65,6 +67,7 @@ public class MavenBuildSettings extends BuildSettings { this.finalName = builder.finalName; this.sourceDirectory = builder.sourceDirectory; this.testSourceDirectory = builder.testSourceDirectory; + this.defaultGoal = builder.defaultGoal; } /** @@ -151,6 +154,14 @@ public class MavenBuildSettings extends BuildSettings { return this.testSourceDirectory; } + /** + * Return the default goal to execute when none is specified for the project. + * @return the default goal or {@code null} to use the default + */ + public String getDefaultGoal() { + return this.defaultGoal; + } + /** * Builder for a Maven dependency. * @@ -178,6 +189,8 @@ public class MavenBuildSettings extends BuildSettings { private String testSourceDirectory; + private String defaultGoal; + public Builder() { } @@ -298,6 +311,16 @@ public class MavenBuildSettings extends BuildSettings { return self(); } + /** + * Set the default goal to execute when none is specified for the project. + * @param defaultGoal the default goal or {@code null} to use the default + * @return this for method chaining + */ + public Builder defaultGoal(String defaultGoal) { + this.defaultGoal = defaultGoal; + return self(); + } + @Override public MavenBuildSettings build() { return new MavenBuildSettings(this); diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java index 296c0d16..3140a3b8 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java @@ -305,12 +305,13 @@ public class MavenBuildWriter { private void writeBuild(IndentingWriter writer, MavenBuild build) { MavenBuildSettings settings = build.getSettings(); if (settings.getFinalName() == null && settings.getSourceDirectory() == null - && settings.getTestSourceDirectory() == null && build.resources().isEmpty() - && build.testResources().isEmpty() && build.plugins().isEmpty()) { + && settings.getTestSourceDirectory() == null && settings.getDefaultGoal() == null + && build.resources().isEmpty() && build.testResources().isEmpty() && build.plugins().isEmpty()) { return; } writer.println(); writeElement(writer, "build", () -> { + writeSingleElement(writer, "defaultGoal", settings.getDefaultGoal()); writeSingleElement(writer, "finalName", settings.getFinalName()); writeSingleElement(writer, "sourceDirectory", settings.getSourceDirectory()); writeSingleElement(writer, "testSourceDirectory", settings.getTestSourceDirectory()); diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildTests.java index 33b5029f..7ddb7b18 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildTests.java @@ -139,4 +139,11 @@ class MavenBuildTests { .hasOnlyOneElementSatisfying((testPlugin) -> assertThat(testPlugin.isExtensions()).isTrue()); } + @Test + void mavenDefaultGoalCanBeCustomized() { + MavenBuild build = new MavenBuild(); + build.settings().defaultGoal("clean package"); + assertThat(build.getSettings().getDefaultGoal()).isEqualTo("clean package"); + } + } diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java index 677c1713..bb2e31f5 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java @@ -802,6 +802,21 @@ class MavenBuildWriterTests { }); } + @Test + void pomWithNoDefaultGoal() { + MavenBuild build = new MavenBuild(); + build.settings().coordinates("com.example.demo", "demo").build(); + generatePom(build, (pom) -> assertThat(pom.nodeAtPath("/project/build/defaultGoal")).isNull()); + } + + @Test + void pomWithDefaultGoal() { + MavenBuild build = new MavenBuild(); + build.settings().coordinates("com.example.demo", "demo").defaultGoal("clean package"); + generatePom(build, + (pom) -> assertThat(pom).textAtPath("/project/build/defaultGoal").isEqualTo("clean package")); + } + private void generatePom(MavenBuild mavenBuild, Consumer consumer) { MavenBuildWriter writer = new MavenBuildWriter(); StringWriter out = new StringWriter();