Как получить версию пакета при запуске Tomcat?
Как получить версию пакета при запуске Tomcat?
Я пытаюсь getClass(). GetPackage(). GetImplementationVersion(), но это всегда возвращает null
, Я предполагаю, что это потому, что моя война еще не была упакована, и Tomcat выполняет.classes (иначе взорвалась война).META-INF\MANIFEST.MF
присутствует в финальной войне, но не в target\<project.name>\META-INF
папка
Объекты пакета содержат информацию о версии о реализации и спецификации пакета Java. Эта информация о версиях извлекается и становится доступной экземпляром ClassLoader, который загрузил класс (ы). Как правило, он хранится в манифесте, который распространяется вместе с классами.
Связана версия Get Maven с артефактом во время выполнения
ОБНОВИТЬ. До этого я уже добавил конфигурацию для сборки войны. Но когда я запускаю Tomcat из Eclipse, я получаю null
,
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
<!-- this actually moves classes from \WEB-INF\classes to new jar
<archiveClasses>true</archiveClasses>
-->
</configuration>
</plugin>
2 ответа
Решено
1) Создание META-INF\MANIFEST.MF в папке веб-приложения с помощью mvn war:manifest
2) Кодирование
version = getClass().getPackage().getImplementationVersion();
if (version==null) {
Properties prop = new Properties();
try {
prop.load(getServletContext().getResourceAsStream("/META-INF/MANIFEST.MF"));
version = prop.getProperty("Implementation-Version");
} catch (IOException e) {
logger.error(e.toString());
}
}
logger.info("Starting App version "+version);
Благодаря ответу @javadude на Как мне прочитать файл манифеста для веб-приложения, работающего в Apache Tomcat?
Обычным источником информации о версии / заголовке / поставщике пакета являются атрибуты в манифесте файла JAR. Смотрите спецификацию файла JAR.
Если получатели возвращаются null
это означает, что соответствующий атрибут не был указан. (И это нормально для обычных файлов JAR.)
Да, это связано со связанным вопросом. Принятый ответ описывает, что нужно сделать, чтобы сказать Maven добавить некоторые подробности версии Maven в JAR-манифест, чтобы вы могли получить к ним доступ во время выполнения, используя Package
API.
Как получить версию пакета при запуске Tomcat?
Вам необходимо создать файлы JAR и поместить информацию о версии в соответствующие манифесты JAR. По-видимому, вы также можете сделать это на уровне файла WAR.
Ссылка: "Развертывание: Военный Версионный Файл и Читатель Манифеста" Фреда Пулса.