From 8dd9c6baa1b46eda64af078e68815e61c6acbd27 Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Wed, 10 Jul 2019 14:06:28 +0300 Subject: [PATCH] Allow build.time to be disabled so BuildInfoMojo's output is repeatable See gh-17390 --- .../it/build-info-custom-build-time/pom.xml | 46 +++++++++++++++++++ .../main/java/org/test/SampleApplication.java | 24 ++++++++++ .../verify.groovy | 10 ++++ .../it/build-info-disable-build-time/pom.xml | 46 +++++++++++++++++++ .../main/java/org/test/SampleApplication.java | 24 ++++++++++ .../verify.groovy | 10 ++++ .../boot/maven/BuildInfoMojo.java | 15 +++++- 7 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/pom.xml create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/src/main/java/org/test/SampleApplication.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-custom-build-time/verify.groovy create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/pom.xml create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/src/main/java/org/test/SampleApplication.java create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/it/build-info-disable-build-time/verify.groovy 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 0000000000..bfa9a51de3 --- /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 0000000000..672d96a2a6 --- /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 0000000000..4bfc71e7ff --- /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 0000000000..9c4059b05b --- /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 0000000000..672d96a2a6 --- /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 0000000000..241007162b --- /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 45b15af5c8..068015b262 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 class BuildInfoMojo extends AbstractMojo { 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 class BuildInfoMojo extends AbstractMojo { } } + private Instant getBuildTime() { + return "off".equals(this.time) ? null : Instant.parse(this.time); + } + }