Use self-closed tag for empty attributes in Maven pom

Closes gh-1244
This commit is contained in:
Stephane Nicoll
2021-06-10 16:43:20 +02:00
parent 8f97ee08f7
commit ffbe0e496a
2 changed files with 22 additions and 3 deletions

View File

@@ -49,6 +49,7 @@ import io.spring.initializr.generator.version.VersionProperty;
import io.spring.initializr.generator.version.VersionReference;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
/**
* A {@link MavenBuild} writer for {@code pom.xml}.
@@ -557,9 +558,14 @@ public class MavenBuildWriter {
private void writeSingleElement(IndentingWriter writer, String name, Object value) {
if (value != null) {
CharSequence text = (value instanceof CharSequence) ? (CharSequence) value : value.toString();
writer.print(String.format("<%s>", name));
writer.print(encodeText(text));
writer.println(String.format("</%s>", name));
if (!StringUtils.hasLength(text)) {
writer.println(String.format("<%s/>", name));
}
else {
writer.print(String.format("<%s>", name));
writer.print(encodeText(text));
writer.println(String.format("</%s>", name));
}
}
}

View File

@@ -217,6 +217,19 @@ class MavenBuildWriterTests {
});
}
@Test
void pomWithPropertiesAndEmptyValue() {
MavenBuild build = new MavenBuild();
build.settings().coordinates("com.example.demo", "demo");
build.properties().property("alpha", "");
generatePom(build, (pom) -> {
assertThat(pom).nodeAtPath("/project/properties/alpha").isNotNull();
assertThat(pom).textAtPath("/project/properties/alpha").isEmpty();
});
String pom = writePom(new MavenBuildWriter(), build);
assertThat(pom).containsSubsequence("<properties>", "<alpha/>", "</properties>");
}
@Test
void pomWithVersionProperties() {
MavenBuild build = new MavenBuild();