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 87ce1e5c..d5d72511 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 @@ -42,6 +42,8 @@ import io.spring.initializr.generator.io.IndentingWriter; import io.spring.initializr.generator.version.VersionProperty; import io.spring.initializr.generator.version.VersionReference; +import org.springframework.util.ObjectUtils; + /** * A {@link MavenBuild} writer for {@code pom.xml}. * @@ -65,8 +67,8 @@ public class MavenBuildWriter { writeProjectCoordinates(writer, settings); writePackaging(writer, settings); writeProjectName(writer, settings); - writeLicenses(writer, settings); - writeDevelopers(writer, settings); + writeCollectionElement(writer, "licenses", settings.getLicenses(), this::writeLicense); + writeCollectionElement(writer, "developers", settings.getDevelopers(), this::writeDeveloper); writeProperties(writer, build.properties()); writeDependencies(writer, build); writeDependencyManagement(writer, build); @@ -134,13 +136,6 @@ public class MavenBuildWriter { }); } - private void writeLicenses(IndentingWriter writer, MavenBuildSettings settings) { - if (settings.getLicenses().isEmpty()) { - return; - } - writeElement(writer, "licenses", () -> writeCollection(writer, settings.getLicenses(), this::writeLicense)); - } - private void writeLicense(IndentingWriter writer, MavenLicense license) { writeElement(writer, "license", () -> { writeSingleElement(writer, "name", license.getName()); @@ -153,14 +148,6 @@ public class MavenBuildWriter { }); } - private void writeDevelopers(IndentingWriter writer, MavenBuildSettings settings) { - if (settings.getDevelopers().isEmpty()) { - return; - } - writeElement(writer, "developers", - () -> writeCollection(writer, settings.getDevelopers(), this::writeDeveloper)); - } - private void writeDeveloper(IndentingWriter writer, MavenDeveloper developer) { writeElement(writer, "developer", () -> { writeSingleElement(writer, "id", developer.getId()); @@ -225,10 +212,7 @@ public class MavenBuildWriter { writeSingleElement(writer, "optional", Boolean.toString(true)); } writeSingleElement(writer, "type", dependency.getType()); - if (!dependency.getExclusions().isEmpty()) { - writeElement(writer, "exclusions", - () -> writeCollection(writer, dependency.getExclusions(), this::writeDependencyExclusion)); - } + writeCollectionElement(writer, "exclusions", dependency.getExclusions(), this::writeDependencyExclusion); }); } @@ -279,7 +263,7 @@ public class MavenBuildWriter { .collect(Collectors.toList()); writer.println(); writeElement(writer, "dependencyManagement", - () -> writeElement(writer, "dependencies", () -> writeCollection(writer, boms, this::writeBom))); + () -> writeCollectionElement(writer, "dependencies", boms, this::writeBom)); } private void writeBom(IndentingWriter writer, BillOfMaterials bom) { @@ -311,20 +295,14 @@ public class MavenBuildWriter { writeSingleElement(writer, "sourceDirectory", settings.getSourceDirectory()); writeSingleElement(writer, "testSourceDirectory", settings.getTestSourceDirectory()); writeResources(writer, build); - writePlugins(writer, build); + writeCollectionElement(writer, "plugins", build.plugins().values(), this::writePlugin); }); } private void writeResources(IndentingWriter writer, MavenBuild build) { - if (!build.resources().isEmpty()) { - writeElement(writer, "resources", () -> writeCollection(writer, - build.resources().values().collect(Collectors.toList()), this::writeResource)); - } - if (!build.testResources().isEmpty()) { - writeElement(writer, "testResources", () -> writeCollection(writer, - build.testResources().values().collect(Collectors.toList()), this::writeTestResource)); - } + writeCollectionElement(writer, "resources", build.resources().values(), this::writeResource); + writeCollectionElement(writer, "testResources", build.testResources().values(), this::writeTestResource); } private void writeResource(IndentingWriter writer, MavenResource resource) { @@ -342,14 +320,8 @@ public class MavenBuildWriter { if (resource.isFiltering()) { writeSingleElement(writer, "filtering", "true"); } - if (!resource.getIncludes().isEmpty()) { - writeElement(writer, "includes", - () -> writeCollection(writer, resource.getIncludes(), this::writeResourceInclude)); - } - if (!resource.getExcludes().isEmpty()) { - writeElement(writer, "excludes", - () -> writeCollection(writer, resource.getExcludes(), this::writeResourceExclude)); - } + writeCollectionElement(writer, "includes", resource.getIncludes(), this::writeResourceInclude); + writeCollectionElement(writer, "excludes", resource.getExcludes(), this::writeResourceExclude); }); } @@ -361,14 +333,6 @@ public class MavenBuildWriter { writeSingleElement(writer, "exclude", exclude); } - private void writePlugins(IndentingWriter writer, MavenBuild build) { - if (build.plugins().isEmpty()) { - return; - } - writeElement(writer, "plugins", () -> writeCollection(writer, - build.plugins().values().collect(Collectors.toList()), this::writePlugin)); - } - private void writePlugin(IndentingWriter writer, MavenPlugin plugin) { writeElement(writer, "plugin", () -> { writeSingleElement(writer, "groupId", plugin.getGroupId()); @@ -378,14 +342,8 @@ public class MavenBuildWriter { writeSingleElement(writer, "extensions", "true"); } writePluginConfiguration(writer, plugin.getConfiguration()); - if (!plugin.getExecutions().isEmpty()) { - writeElement(writer, "executions", - () -> writeCollection(writer, plugin.getExecutions(), this::writePluginExecution)); - } - if (!plugin.getDependencies().isEmpty()) { - writeElement(writer, "dependencies", - () -> writeCollection(writer, plugin.getDependencies(), this::writePluginDependency)); - } + writeCollectionElement(writer, "executions", plugin.getExecutions(), this::writePluginExecution); + writeCollectionElement(writer, "dependencies", plugin.getDependencies(), this::writePluginDependency); }); } @@ -393,8 +351,7 @@ public class MavenBuildWriter { if (configuration == null || configuration.getSettings().isEmpty()) { return; } - writeElement(writer, "configuration", - () -> writeCollection(writer, configuration.getSettings(), this::writeSetting)); + writeCollectionElement(writer, "configuration", configuration.getSettings(), this::writeSetting); } @SuppressWarnings("unchecked") @@ -403,8 +360,7 @@ public class MavenBuildWriter { writeSingleElement(writer, setting.getName(), (String) setting.getValue()); } else if (setting.getValue() instanceof List) { - writeElement(writer, setting.getName(), - () -> writeCollection(writer, (List) setting.getValue(), this::writeSetting)); + writeCollectionElement(writer, setting.getName(), (List) setting.getValue(), this::writeSetting); } } @@ -435,12 +391,8 @@ public class MavenBuildWriter { return; } writer.println(); - if (!repositories.isEmpty()) { - writeRepositories(writer, "repositories", "repository", repositories); - } - if (!pluginRepositories.isEmpty()) { - writeRepositories(writer, "pluginRepositories", "pluginRepository", pluginRepositories); - } + writeCollectionElement(writer, "repositories", repositories, this::writeRepository); + writeCollectionElement(writer, "pluginRepositories", pluginRepositories, this::writePluginRepository); } private List filterRepositories(Stream repositories) { @@ -451,15 +403,26 @@ public class MavenBuildWriter { private void writeRepositories(IndentingWriter writer, String containerName, String childName, List repositories) { writeElement(writer, containerName, - () -> repositories.forEach((repository) -> writeElement(writer, childName, () -> { - writeSingleElement(writer, "id", repository.getId()); - writeSingleElement(writer, "name", repository.getName()); - writeSingleElement(writer, "url", repository.getUrl()); - if (repository.isSnapshotsEnabled()) { - writeElement(writer, "snapshots", - () -> writeSingleElement(writer, "enabled", Boolean.toString(true))); - } - }))); + () -> repositories.forEach((repository) -> writeRepository(writer, repository, childName))); + } + + private void writeRepository(IndentingWriter writer, MavenRepository repository) { + writeRepository(writer, repository, "repository"); + } + + private void writePluginRepository(IndentingWriter writer, MavenRepository repository) { + writeRepository(writer, repository, "pluginRepository"); + } + + private void writeRepository(IndentingWriter writer, MavenRepository repository, String childName) { + writeElement(writer, childName, () -> { + writeSingleElement(writer, "id", repository.getId()); + writeSingleElement(writer, "name", repository.getName()); + writeSingleElement(writer, "url", repository.getUrl()); + if (repository.isSnapshotsEnabled()) { + writeElement(writer, "snapshots", () -> writeSingleElement(writer, "enabled", Boolean.toString(true))); + } + }); } private void writeSingleElement(IndentingWriter writer, String name, String text) { @@ -476,6 +439,18 @@ public class MavenBuildWriter { writer.println(String.format("", name)); } + private void writeCollectionElement(IndentingWriter writer, String name, Stream items, + BiConsumer itemWriter) { + writeCollectionElement(writer, name, items.collect(Collectors.toList()), itemWriter); + } + + private void writeCollectionElement(IndentingWriter writer, String name, Collection items, + BiConsumer itemWriter) { + if (!ObjectUtils.isEmpty(items)) { + writeElement(writer, name, () -> writeCollection(writer, items, itemWriter)); + } + } + private void writeCollection(IndentingWriter writer, Collection collection, BiConsumer itemWriter) { if (!collection.isEmpty()) {