在Spring配置文件中访问maven项目版本

我想在页面中显示我当前运行的Web应用程序版本。 该项目基于Maven,Spring和Wicket。

我想以某种方式获得maven的${project.version}的价值并在我的spring XML文件中使用它,类似于我使用Spring PropertyPlaceholderConfigurer读取属性文件以获取我在我的应用程序中使用的设置的方式。

如果我在我的Spring配置中将maven project.version作为变量提供,我可以这样做:

  ${project.version}  

我怎样才能做到这一点?

您可以按照建议使用Maven 过滤 。

或者您可以直接使用Spring读取由Maven在META-INF目录下创建的pom.properties文件:

  

并使用豆。

后一种方法的唯一缺点是pom.properties是在package阶段时创建的(并且在test期间不会出现)。

一种技术是使用mavens过滤。 您可以在资源文件中插入占位符,然后在资源阶段将其替换为构建中的值。

查找“如何过滤资源文件?” 在Maven入门指南

使用@PropertySource批注将Maven创建的pom.properties文件添加到META-INF目录中。 请注意,该文件在阶段之前不存在。 为避免测试期间出现错误,请设置ignoreResourceNotFound = true并在正在读取的属性上添加默认值(例如,下面没有 )。

 @Service @PropertySource(value = "classpath:META-INF/maven/io.pivotal.poc.tzolov/hawq-rest-server/pom.properties", ignoreResourceNotFound=true) public class MyClass { private String applicationPomVersion; @Autowired public MyClass(@Value("${version:none}") String applicationVersion ) { this.applicationPomVersion = applicationVersion; } public String getApplicationPomVersion() { return this.applicationPomVersion; } } 

我们在Web应用程序之外部署属性文件。 然后可以在部署时过滤这些文件。

如果使用Jetty,可以将文件放在$ JETTY_HOME / resources下,或使用extraClassPathfunction在运行时加载属性文件。

我认为收集应用程序版本的正确方法是在这个post中解释的: https : //stackoverflow.com/a/2713013/840635通过getClass().getPackage().getImplementationVersion()