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

时间:2010-10-07 23:51:17

标签: java spring maven-2 maven wicket

我想在页面中显示我当前运行的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>

我该怎么做?

5 个答案:

答案 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/840635getClass().getPackage().getImplementationVersion()