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

5

我希望在网页中显示当前运行的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个回答

11

你可以像之前建议的那样使用Maven 过滤

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

<util:properties id="pom" 
     location="classpath:META-INF/groupId/artifactId/pom.properties" />

然后使用这个bean。

后一种方法唯一的缺点是,pom.properties是在package阶段创建的(比如说,在test阶段时没有该文件)。


是的,这是更好的解决方案(+1) - Sean Patrick Floyd
非常好的链接,包含了我所需要的内容。展示了如何为不同资源进行包含和排除过滤,与@Derek链接到的入门指南不同。还要感谢提供的其他选择,但是过滤功能已经完全满足需求了。 - Tauren
那行代码应该放在哪里? - Randell

7
一种方法是使用Maven过滤器。您可以在资源文件中插入占位符,如{{}},然后在资源阶段从构建中替换为值。
Maven入门指南中查找“如何过滤资源文件?”

1
使用@PropertySource注解将由Maven在META-INF目录中创建的pom.properties文件添加到项目中。请注意,该文件直到打包阶段才存在。为避免测试期间出现错误,请设置ignoreResourceNotFound=true并在读取属性时添加默认值(例如下面的none)。
@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;
    }
}

0

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接