Как получить версию пакета при запуске 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.