diff --git a/spring-boot/src/main/java/org/springframework/boot/ResourceBanner.java b/spring-boot/src/main/java/org/springframework/boot/ResourceBanner.java index 89a82a0b84..cff34bfff5 100644 --- a/spring-boot/src/main/java/org/springframework/boot/ResourceBanner.java +++ b/spring-boot/src/main/java/org/springframework/boot/ResourceBanner.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 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. @@ -106,7 +106,7 @@ public class ResourceBanner implements Banner { } protected String getBootVersion() { - return Banner.class.getPackage().getImplementationVersion(); + return SpringBootVersion.getVersion(); } private String getVersionString(String version, boolean format) { diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringBootBanner.java b/spring-boot/src/main/java/org/springframework/boot/SpringBootBanner.java index 2489859dfb..e7e8a80b0c 100644 --- a/spring-boot/src/main/java/org/springframework/boot/SpringBootBanner.java +++ b/spring-boot/src/main/java/org/springframework/boot/SpringBootBanner.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2013 the original author or authors. + * Copyright 2012-2015 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. @@ -50,7 +50,7 @@ class SpringBootBanner implements Banner { for (String line : BANNER) { printStream.println(line); } - String version = Banner.class.getPackage().getImplementationVersion(); + String version = SpringBootVersion.getVersion(); version = (version == null ? "" : " (v" + version + ")"); String padding = ""; while (padding.length() < STRAP_LINE_SIZE diff --git a/spring-boot/src/main/java/org/springframework/boot/SpringBootVersion.java b/spring-boot/src/main/java/org/springframework/boot/SpringBootVersion.java new file mode 100644 index 0000000000..307d3717b4 --- /dev/null +++ b/spring-boot/src/main/java/org/springframework/boot/SpringBootVersion.java @@ -0,0 +1,44 @@ +/* + * Copyright 2012-2015 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 + * + * http://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; + +/** + * Class that exposes the Spring Boot version. Fetches the "Implementation-Version" + * manifest attribute from the jar file. + *
+ * Note that some ClassLoaders do not expose the package metadata, hence this class might + * not be able to determine the Spring Boot version in all environments. 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 + * @since 1.3.0 + */ +public 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} + * @see Package#getImplementationVersion() + */ + public static String getVersion() { + Package pkg = SpringApplication.class.getPackage(); + return (pkg != null ? pkg.getImplementationVersion() : null); + } + +}