diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/pom.xml
new file mode 100644
index 000000000000..bfa9a51de3cc
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+ org.springframework.boot.maven.it
+ build-info-custom-build-time
+ 0.0.1.BUILD-SNAPSHOT
+ Generate build info with custom build time
+
+ UTF-8
+ @java.version@
+ @java.version@
+
+
+
+
+ @project.groupId@
+ @project.artifactId@
+ @project.version@
+
+
+
+
+
+
+ build-info
+
+
+
+
+
+
+
+
+ org.springframework
+ spring-context
+ @spring-framework.version@
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ @jakarta-servlet.version@
+ provided
+
+
+
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java
new file mode 100644
index 000000000000..672d96a2a604
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2012-2019 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.test;
+
+public class SampleApplication {
+
+ public static void main(String[] args) {
+ }
+
+}
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/verify.groovy
new file mode 100644
index 000000000000..4bfc71e7ff4e
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/verify.groovy
@@ -0,0 +1,10 @@
+import org.springframework.boot.maven.Verify
+
+import static org.junit.Assert.assertEquals
+
+def file = new File(basedir, "target/classes/META-INF/build-info.properties")
+println file.getAbsolutePath()
+Properties properties = Verify.verifyBuildInfo(file,
+ 'org.springframework.boot.maven.it', 'build-info-custom-build-time',
+ 'Generate build info with custom build time', '0.0.1.BUILD-SNAPSHOT')
+assertEquals(properties.get('build.time'), '2019-07-08T08:00:00Z')
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/pom.xml
new file mode 100644
index 000000000000..9c4059b05b70
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+ org.springframework.boot.maven.it
+ build-info-disable-build-time
+ 0.0.1.BUILD-SNAPSHOT
+ Generate build info with disabled build time
+
+ UTF-8
+ @java.version@
+ @java.version@
+
+
+
+
+ @project.groupId@
+ @project.artifactId@
+ @project.version@
+
+
+
+
+
+
+ build-info
+
+
+
+
+
+
+
+
+ org.springframework
+ spring-context
+ @spring-framework.version@
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ @jakarta-servlet.version@
+ provided
+
+
+
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java
new file mode 100644
index 000000000000..672d96a2a604
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2012-2019 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.test;
+
+public class SampleApplication {
+
+ public static void main(String[] args) {
+ }
+
+}
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/verify.groovy b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/verify.groovy
new file mode 100644
index 000000000000..241007162be8
--- /dev/null
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/verify.groovy
@@ -0,0 +1,10 @@
+import org.springframework.boot.maven.Verify
+
+import static org.junit.Assert.assertFalse
+
+def file = new File(basedir, "target/classes/META-INF/build-info.properties")
+println file.getAbsolutePath()
+Properties properties = Verify.verifyBuildInfo(file,
+ 'org.springframework.boot.maven.it', 'build-info-disable-build-time',
+ 'Generate build info with disabled build time', '0.0.1.BUILD-SNAPSHOT')
+assertFalse 'build time must not be present', properties.containsKey('build.time')
diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java
index 45b15af5c8a8..068015b262f9 100644
--- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java
+++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/BuildInfoMojo.java
@@ -59,6 +59,15 @@ public class BuildInfoMojo extends AbstractMojo {
@Parameter(defaultValue = "${project.build.outputDirectory}/META-INF/build-info.properties")
private File outputFile;
+ /**
+ * Sets the value used for the {@code build.time} property. Defaults to
+ * {@link Instant#now} when the {@code mojo} instance was created. To disable
+ * {@code build.time} property, {@code 'off'} value should be used.
+ * @since 2.2.0
+ */
+ @Parameter
+ private String time = Instant.now().toString();
+
/**
* Additional properties to store in the build-info.properties. Each entry is prefixed
* by {@code build.} in the generated build-info.properties.
@@ -71,7 +80,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
try {
new BuildPropertiesWriter(this.outputFile).writeBuildProperties(new ProjectDetails(
this.project.getGroupId(), this.project.getArtifactId(), this.project.getVersion(),
- this.project.getName(), Instant.now(), this.additionalProperties));
+ this.project.getName(), getBuildTime(), this.additionalProperties));
this.buildContext.refresh(this.outputFile);
}
catch (NullAdditionalPropertyValueException ex) {
@@ -82,4 +91,8 @@ public void execute() throws MojoExecutionException, MojoFailureException {
}
}
+ private Instant getBuildTime() {
+ return "off".equals(this.time) ? null : Instant.parse(this.time);
+ }
+
}