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..8b21fe89 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 @@ -47,6 +47,8 @@ public class MavenBuildSettings extends BuildSettings { private final MavenScm scm; + private final String defaultGoal; + private final String finalName; private final String sourceDirectory; @@ -62,6 +64,7 @@ public class MavenBuildSettings extends BuildSettings { this.licenses = Collections.unmodifiableList(new ArrayList<>(builder.licenses)); this.developers = Collections.unmodifiableList(new ArrayList<>(builder.developers)); this.scm = builder.scm.build(); + this.defaultGoal = builder.defaultGoal; this.finalName = builder.finalName; this.sourceDirectory = builder.sourceDirectory; this.testSourceDirectory = builder.testSourceDirectory; @@ -125,6 +128,14 @@ public class MavenBuildSettings extends BuildSettings { return this.scm; } + /** + * Return the default goal or phase to execute if none is given. + * @return the default goal or {@code null} to use the default + */ + public String getDefaultGoal() { + return this.defaultGoal; + } + /** * Return the final name of the artifact. * @return the final name or {@code null} to use the default @@ -172,6 +183,8 @@ public class MavenBuildSettings extends BuildSettings { private final MavenScm.Builder scm = new MavenScm.Builder(); + private String defaultGoal; + private String finalName; private String sourceDirectory; @@ -274,6 +287,16 @@ public class MavenBuildSettings extends BuildSettings { return self(); } + /** + * Set the default goal or phase to execute if none is given. + * @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(); + } + /** * Set the the location of main source code. Can use Maven properties such as * {@code ${basedir}}. 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..7c71d198 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 @@ -304,13 +304,14 @@ 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()) { + if (settings.getDefaultGoal() == null && settings.getFinalName() == null + && settings.getSourceDirectory() == null && settings.getTestSourceDirectory() == 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/MavenBuildWriterTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java index 677c1713..fa86d6dc 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 @@ -672,6 +672,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")); + } + @Test void pomWithNoFinalName() { MavenBuild build = new MavenBuild();