我想在页面中显示我当前运行的Web应用程序版本。该项目基于Maven,Spring和Wicket。
我想以某种方式获取maven的${project.version}
的值并在我的spring XML文件中使用它,类似于我使用Spring PropertyPlaceholderConfigurer读取属性文件以获取我在我的应用程序中使用的设置的方式。
如果我在我的Spring配置中将maven project.version
作为变量提供,我可以这样做:
<bean id="applicationBean" class="com.mysite.web.WicketApplication">
<property name="version"><value>${project.version}</value></property>
</bean>
我该怎么做?
答案 0 :(得分:11)
您可以按照建议使用Maven filtering。
或者你可以直接用Spring读取Maven在META-INF目录下创建的pom.properties
文件:
<util:properties id="pom"
location="classpath:META-INF/groupId/artifactId/pom.properties" />
并使用bean。
后一种方法的唯一缺点是pom.properties
是在package
阶段创建的(并且在test
期间不会出现。)
答案 1 :(得分:7)
一种技术是使用mavens过滤。您可以在资源文件中插入占位符,然后在资源阶段将其替换为构建中的值。
查找“如何过滤资源文件?”在Maven getting started guide
中答案 2 :(得分:1)
使用@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;
}
}
答案 3 :(得分:0)
我们在Web应用程序之外部署属性文件。然后可以在部署时过滤这些文件。
如果使用Jetty,可以将文件放在$ JETTY_HOME / resources下,或使用extraClassPath功能在运行时加载属性文件。
答案 4 :(得分:0)
我认为收集应用程序版本的正确方法是在此主题中解释的:https://stackoverflow.com/a/2713013/840635到getClass().getPackage().getImplementationVersion()
。