Tomcat 7 - Получить версию веб-приложения (версия WAR) - PullRequest
4 голосов
/ 22 ноября 2011

Мне не удалось найти простой способ выяснить строку версии для файла WAR, развернутого с версионным именованием Tomcat 7 (т. Е. Приложение ## version.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));

Ответы [ 3 ]

5 голосов
/ 06 ноября 2012

Я думаю, что самое простое решение - использовать ту же версию (SVN revision + padding в качестве примера) в .war, web.xml и META-INF/MANIFEST.MF файлах свойств, чтобы вы могли получить версию этих файлов позже в вашем приложении. или любой стандартный инструмент, который читает версию из JAR / WAR

См. MANIFEST.MF номер версии

2 голосов
/ 20 ноября 2013

Другое решение, описанное здесь использует имя пути на сервере развернутой WAR.Вы извлекли бы номер версии из строки между "##" и "/"

runningVersion = StringUtils.substringBefore(
                 StringUtils.substringAfter(
                     servletConfig.getServletContext().getRealPath("/"),
                     "##"),
                 "/");
0 голосов
/ 21 ноября 2013

Самый простой способ для Tomcat - сделать версию доступной через атрибут ServletContext (org.apache.catalina.core.StandardContext.webappVersion) или аналогичный.Патч для этого будет тривиальным.Я бы предложил открыть запрос на улучшение в Bugzilla Tomcat.Если вы включите патч, он должен быть применен довольно быстро.

...