2010-10-07 64 views
5

我想在页面中显示我的web应用程序的当前运行版本。该项目基于Maven,Spring和Wicket。在Spring配置文件中访问maven项目版本

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

如果我有行家project.version可作为我的Spring配置一个变量,我可以做这样的事情:

<bean id="applicationBean" class="com.mysite.web.WicketApplication"> 
<property name="version"><value>${project.version}</value></property> 
</bean> 

我怎么能这样做呢?

回答

11

您可以按照已经建议的方式使用Maven filtering

或者您也可以阅读的Maven直接META-INF目录下创建的文件pom.properties与Spring:

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

,并使用这个bean。

后面的方法唯一的缺点是pom.properties创建在package阶段时间(并且不会在那里,例如,在test期间)。

+0

是的,这是一个更好的解决方案(+1) – 2010-10-08 14:59:09

+0

伟大的链接,包括我所需要的。显示如何为不同资源包含和排除筛选,这与由@Derek链接的入门指南不同。也感谢您的选择,但过滤技巧就好了。 – Tauren 2010-10-09 08:08:54

+0

该线应该去哪里? – Randell 2017-06-02 03:54:05

7

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

查找“如何过滤资源文件?”在Maven getting started guide

+0

感谢您的帮助! – Tauren 2010-10-09 08:06:48

0

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

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

1

使用@PropertySource批注在META-INF目录中添加由Maven创建的pom.properties文件。请注意,该文件在阶段才存在。为避免测试期间出现错误,请设置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; 
    } 
} 
相关问题