Use a templated source file for SpringBootVersion

Closes gh-29670
This commit is contained in:
Andy Wilkinson
2022-02-18 15:55:25 +00:00
parent 1f8700fbd1
commit 027093d852
6 changed files with 97 additions and 146 deletions

View File

@@ -155,7 +155,26 @@ task extractTomcatConfigProperties(type: Sync) {
}
}
def syncJavaTemplates = tasks.register("syncJavaTemplates", Sync) {
from("src/main/javaTemplates")
into("build/generated-sources/main")
def properties = ["springBootVersion": project.version]
expand(properties)
inputs.properties(properties)
}
plugins.withType(EclipsePlugin) {
eclipse {
synchronizationTasks syncJavaTemplates
}
}
sourceSets {
main {
java {
srcDirs syncJavaTemplates
}
}
test {
output.dir(tomcatConfigProperties, builtBy: "extractTomcatConfigProperties")
}

View File

@@ -16,18 +16,9 @@
package org.springframework.boot;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Exposes the Spring Boot version.
*
* The version information is read from a file that is stored in the Spring Boot library.
* If the version information cannot be read from the file, consider using a
* reflection-based check instead (for example, checking for the presence of a specific
* Spring Boot method that you intend to call).
*
* @author Drummond Dawson
* @author Hendrig Sellik
* @author Andy Wilkinson
@@ -40,24 +31,11 @@ public final class SpringBootVersion {
}
/**
* Return the full version string of the present Spring Boot codebase, or {@code null}
* if it cannot be determined.
* @return the version of Spring Boot or {@code null}
* Return the full version string of the present Spring Boot codebase.
* @return the version of Spring Boot
*/
public static String getVersion() {
InputStream input = SpringBootVersion.class.getClassLoader()
.getResourceAsStream("META-INF/spring-boot.properties");
if (input != null) {
try {
Properties properties = new Properties();
properties.load(input);
return properties.getProperty("version");
}
catch (IOException ex) {
// fall through
}
}
return null;
return "${springBootVersion}";
}
}

View File

@@ -0,0 +1,56 @@
/*
* Copyright 2012-2022 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.springframework.boot;
import java.io.File;
import java.io.IOException;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link SpringBootVersion}.
*
* @author Andy Wilkinson
*/
public class SpringBootVersionTests {
@Test
void getVersionShouldReturnVersionMatchingGradleProperties() throws IOException {
String expectedVersion = PropertiesLoaderUtils.loadProperties(new FileSystemResource(findGradleProperties()))
.getProperty("version");
assertThat(SpringBootVersion.getVersion()).isEqualTo(expectedVersion);
}
private File findGradleProperties() {
File current = new File(".").getAbsoluteFile();
while (current != null) {
File gradleProperties = new File(current, "gradle.properties");
System.out.println(gradleProperties);
if (gradleProperties.isFile()) {
return gradleProperties;
}
current = current.getParentFile();
}
throw new IllegalStateException("Could not find gradle.properties");
}
}