在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()
。