diff --git a/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/BuildPropertiesWriter.java b/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/BuildPropertiesWriter.java index 1757a95a604..39ebbcbd718 100644 --- a/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/BuildPropertiesWriter.java +++ b/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/BuildPropertiesWriter.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; /** @@ -119,9 +120,21 @@ public final class BuildPropertiesWriter { this.artifact = artifact; this.name = name; this.version = version; + validateAdditionalProperties(additionalProperties); this.additionalProperties = additionalProperties; } + private static void validateAdditionalProperties( + Map additionalProperties) { + if (additionalProperties != null) { + for (Entry property : additionalProperties.entrySet()) { + if (property.getValue() == null) { + throw new NullAdditionalPropertyValueException(property.getKey()); + } + } + } + } + public String getGroup() { return this.group; } @@ -143,4 +156,16 @@ public final class BuildPropertiesWriter { } } + + /** + * Exception thrown when an additional property with a null value is encountered. + */ + public static class NullAdditionalPropertyValueException + extends IllegalArgumentException { + + public NullAdditionalPropertyValueException(String name) { + super("Additional property '" + name + "' is illegal as its value is null"); + } + + } } diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java b/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java index 49a335c06df..d965425742c 100644 --- a/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java +++ b/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java @@ -28,6 +28,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import org.springframework.boot.loader.tools.BuildPropertiesWriter; +import org.springframework.boot.loader.tools.BuildPropertiesWriter.NullAdditionalPropertyValueException; import org.springframework.boot.loader.tools.BuildPropertiesWriter.ProjectDetails; /** @@ -53,8 +54,8 @@ public class BuildInfoMojo extends AbstractMojo { private File outputFile; /** - * Additional properties to store in the build-info.properties. Each entry is prefixed by - * {@code build.} in the generated build-info.properties. + * Additional properties to store in the build-info.properties. Each entry is prefixed + * by {@code build.} in the generated build-info.properties. */ @Parameter private Map additionalProperties; @@ -67,6 +68,10 @@ public class BuildInfoMojo extends AbstractMojo { this.project.getArtifactId(), this.project.getVersion(), this.project.getName(), this.additionalProperties)); } + catch (NullAdditionalPropertyValueException ex) { + throw new MojoFailureException( + "Failed to generated build-info.properties. " + ex.getMessage(), ex); + } catch (Exception ex) { throw new MojoExecutionException(ex.getMessage(), ex); }