Как получить версию пакета при запуске Tomcat?

Как получить версию пакета при запуске Tomcat?

Я пробую getClass (). GetPackage (). GetImplementationVersion (), но это всегда возвращает null. Я предполагаю, что это потому, что моя война еще не была упакована, а Tomcat выполняет .classes (также известный как взорванная война). META-INF\MANIFEST.MF присутствует в final war, но не в папке target\<project.name>\META-INF

java.lang.Package

Объекты пакета содержат информацию о версии реализации и спецификации пакета Java. Эта информация о версиях извлекается и становится доступной экземпляром ClassLoader, который загрузил класс (ы). Обычно он хранится в манифесте, который распространяется вместе с классами.

Связано это с Получить версию артефакта 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>

person Paul Verest    schedule 18.02.2013    source источник


Ответы (2)


Решено
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 на Как мне прочитать файл манифеста для веб-приложения, работающего в apache tomcat?

person Paul Verest    schedule 19.02.2013

Обычным источником информации о версии / названии / поставщике пакета являются атрибуты в манифесте файла JAR. См. Спецификацию файла JAR.

Если геттеры возвращают null, это означает, что соответствующий атрибут не был указан. (И это нормально и для обычных файлов JAR.)

Да, это связано со связанным вопросом. В принятом ответе описывается, что нужно сделать, чтобы Maven добавил некоторые сведения о версии Maven в манифест JAR, чтобы вы могли получить к ним доступ во время выполнения с помощью Package API.


Как получить версию пакета при запуске Tomcat?

Вам необходимо создать файлы JAR и поместить информацию о версии в соответствующие манифесты JAR. По-видимому, вы также можете сделать это на уровне файла WAR.

Ссылка: «Deploy: War File Versioning and Manifest Reader» от Фреда Пулса .

person Stephen C    schedule 18.02.2013