2011-11-22 53 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中打開一個增強請求。如果你包含一個補丁,那麼它應該很快得到應用。