我想在我的htm页面中显示我的webapp版本,使用类似的东西(百里香内部):
<h4 th:text="${version}">Version</h4>
数据在pom.xml中设置良好:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.test.navig</groupId>
<artifactId>navigo</artifactId>
<version>2.0.3-SNAPSHOT</version>
...
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>Application</mainClass>
<addDefaultImplementationEntries>
true
</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
我可以在MANIFEST.MF(在META-INF下生成的jar中)中看到它:
实施 - 版本:2.0.3-SNAPSHOT
我试图在控制器中获取应用程序版本并将其设置在ModuleAttribute中:
@ModelAttribute("version")
public String getVersion() {
logger.info("ModelAttribute to get application version");
return getClass().getPackage().getImplementationVersion();
}
但getClass().getPackage().getImplementationVersion()
值为null
。实际上,package implementationVersion不是默认情况下应用程序的实现版本。
答案 0 :(得分:6)
我知道我迟到了Patrick's answer而Spring文档在这件事上有很大的帮助。
1。如果您的 pom.xml 使用 spring-boot-starter-parent 作为父级,则可以使用@project.version@
在 application.properties 文件中获取版本(以及任何其他Maven属性)。根据Spring文档:
您可以使用自动从Maven项目扩展属性 资源过滤。如果你使用spring-boot-starter-parent你 能够 然后通过@ .. @ placeholders
参考你的Maven'项目属性'
Maven pom.xml :
<groupId>com.foo</groupId>
<artifactId>bar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Foo</name>
<description>Bar</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
Spring application.properties :
foo.app.version=@project.version@
2. 然后可以使用注释为@ControllerAdvice
的类将版本注入模型属性。
@ControllerAdvice
public class ControllerAdvice {
@Value("${foo.app.version}")
private String applicationVersion;
@ModelAttribute("applicationVersion")
public String getApplicationVersion() {
return applicationVersion;
}
}
3. 最后,Thymeleaf可以像任何其他人一样访问此模型属性。
<th:block th:text="${applicationVersion}"></th:block>
希望这有帮助!
答案 1 :(得分:2)
这是我发现的最简单的方法: 在我的控制器中:
@ModelAttribute("version")
public String getVersion() throws IOException {
logger.info("ModelAttribute to get application version");
Manifest manif = new Manifest(
Application.class.getResourceAsStream("/META-INF/MANIFEST.MF"));
String version = (String) manif.getMainAttributes().get(
Attributes.Name.IMPLEMENTATION_VERSION);
return version;
}
在我的htm页面中:
<h4 th:text="${version}">Version</h4>
答案 2 :(得分:0)
您需要配置资源插件以激活对需要使用来自POM文件的属性进行丰富的文件的过滤。
在生成的战争中,版本(事实上${project.version}
)将被硬编码到您的POM版本。