Как получить версию пакета при запуске Tomcat?
Как получить версию пакета при запуске Tomcat?
Я пытаюсь getClass(). getPackage(). getImplementationVersion(), но это всегда возвращает null
.
Наверное, это потому, что моя война еще не была упакована, а Томкат исполняет .classes(иначе взорванную войну).
META-INF\MANIFEST.MF
присутствует в финальной войне, но не в папке target\<project.name>\META-INF
java.lang.Package
Объекты пакета содержат информацию о версии реализации и спецификация пакета Java. Эта информация о версии извлекается и предоставляется доступным экземпляром ClassLoader, загруженным классы). Как правило, он хранится в манифесте, который распределенных с классами.
Связанный Получите версию артефакта Maven во время выполнения
UPDATE. Прежде, чем я уже добавил конфигурацию для сборки войны. Но при запуске 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>
Ответы
Ответ 1
Решено
1) Создание META-INF\MANIFEST.MF в папке webapp с помощью 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 ответ на Как прочитать файл манифеста для webapp, запущенного в apache tomcat?
Ответ 2
Нормальным источником информации о версии пакета/заголовка/поставщика является атрибут в манифесте JAR файла. См. JAR File Specification.
Если getters возвращают null
, это означает, что соответствующий атрибут не указан. (И это нормально для обычных JAR файлов тоже.)
Да, это связано с связанным вопросом. В принятом ответе описывается, что делать, чтобы сообщить Maven добавить некоторые детали версии Maven в манифест JAR, чтобы вы могли получить к ним доступ во время выполнения с помощью API Package
.
Как получить версию пакета при запуске Tomcat?
Вам нужно создать JAR файлы и поместить информацию о версии в соответствующие манифесты JAR. Очевидно, вы также можете сделать это на уровне WAR-WAR.
Ссылка: "Развертывание: War File Versioning and Manifest Reader" от Fred Puls.