2011-11-22 57 views
4

我一直找不到找到使用Tomcat 7版本化命名部署的WAR文件的版本字符串的简单方法(即app ## version.war )。您可以阅读关于它here以及它可以使hereTomcat 7 - 检索Web应用程序的版本(版本化的WAR)

这会是很好,如果有比反射供电胸腔破裂通常的瑞士军刀等一个较为支持的方法:

final ServletContextEvent event ... 
final ServletContext applicationContextFacade = event.getServletContext(); 
final Field applicationContextField = applicationContextFacade.getClass().getDeclaredField("context"); 
applicationContextField.setAccessible(true); 
final Object applicationContext = applicationContextField.get(applicationContextFacade); 
final Field standardContextField = applicationContext.getClass().getDeclaredField("context"); 
standardContextField.setAccessible(true); 
final Object standardContext = standardContextField.get(applicationContext); 
final Method webappVersion = standardContext.getClass().getMethod("getWebappVersion"); 
System.err.println("WAR version: " + webappVersion.invoke(standardContext)); 

回答

5

我认为最简单的解决方案是使用同一版本(SVN版本+ IN .warweb.xmlMETA-INF/MANIFEST.MF属性文件填充为例),所以你可以检索这些文件在您的应用程序或任何标准的工具,从一个JAR/WAR

读版本更高的版本见MANIFEST.MF version-number

2

介绍的另一个解决方案here使用已部署WAR的服务器上的路径名。你会从“##”之间的字符串中提取的版本号和“/”

runningVersion = StringUtils.substringBefore(
       StringUtils.substringAfter(
        servletConfig.getServletContext().getRealPath("/"), 
        "##"), 
       "/"); 
0

最简单的方法是为Tomcat,使通过ServletContext属性的可用版本(org.apache.catalina .core.StandardContext.webappVersion)或类似的。这样做的补丁将是微不足道的。我建议在Tomcat的Bugzilla中打开一个增强请求。如果你包含一个补丁,那么它应该很快得到应用。