Чтение версии Maven-артефакта во время выполнения
Быстрый ответ
Для того, чтобы узнать версию артефакта Maven во время работы приложения, вам потребуется Java-класс Properties
. С его помощью можно загрузить файл pom.properties
, который располагается по пути META-INF/maven/<groupId>/<artifactId>/
:
Properties prop = new Properties();
prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(
"META-INF/maven/com.yourgroup/yourartifact/pom.properties"));
String version = prop.getProperty("version");
System.out.println(version);
Следует заменить com.yourgroup
и yourartifact
на актуальные значения groupId и artifactId, для корректного извлечения версии.
Продвинутое использование версионной информации
Для получения доступа к версии, указанной в файле MANIFEST.MF
JAR-архива, выполните следующие действия:
В файле
pom.xml
установите значениеtrue
для параметраaddDefaultImplementationEntries
в настройках maven-jar-plugin:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> </manifest> </archive> </configuration> </plugin>
Для получения версии используйте класс
Package
:Package pkg = MyClass.class.getPackage(); String version = pkg.getImplementationVersion(); System.out.println(version);
Вместо
MyClass
укажите класс из вашего проекта.
Важные механизмы запасного плана и сознательность
Будьте готовы к ситуациям, когда версия недоступна. Это может случиться, например, в разработческой среде, где код не упаковывается в JAR:
String version = MyClass.class.getPackage().getImplementationVersion();
if (version == null) {
version = "1.0.0-UNKNOWN";
}
И не забывайте о потокобезопасности при доступе к данным о версии в многопоточном приложении.
Использование Apache Maven Archiver для упаковки с наслаждением
Apache Maven Archiver значительно упрощает процесс упаковки и обеспечивает удобное управление версиями. Особенно это актуально при использовании его совместно с maven-assembly-plugin при особых требованиях к артефактам.
Визуализация
Процесс получения версии артефакта Maven можно представить как поиск в свитке мастер-ключей:
🏷️ Связка ключей (Ваше Приложение)
|
├── 🗝️ Ключ 1 (Артефакт A) – ID: 1.0
|
├── 🗝️ Ключ 2 (Артефакт B) – ID: 2.3
|
└── 🗝️ Ключ 3 (Артефакт C) – **Где же ты, версия?**
С помощью класса Properties
вы сможете считывать pom.properties
из вашего JAR-архива:
Properties props = new Properties();
props.load(getClass().getClassLoader().getResourceAsStream("META-INF/maven/<groupId>/<artifactId>/pom.properties"));
String version = props.getProperty("version");
Таким образом, вы сможете установить точный версионный ID вашего приложения.
Работа с различными типами пакетов, например, war
Для war-пакетов в файл pom.xml
необходимо добавить настройки maven-war-plugin, чтобы версия отображалась в MANIFEST.MF
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
Использование версии артефакта во время работы с Spring Boot
При использовании Spring Boot для доступа к информации о версии артефакта используется BuildProperties
:
@Autowired
BuildProperties buildProperties;
public void printVersion() {
System.out.println(buildProperties.getVersion());
}
Необходимо настроить Spring Boot Maven Plugin для создания информации о сборке.
Преимущества стандартов версионирования в экосистеме Spring
Spring Boot Actuator позволяет создать конечную точку /info
, возвращающую версию приложения. Чтобы включить эту функцию, добавьте следующую строку в application.properties
:
management.info.build.enabled=true
Совместное использование Lombok и Spring Boot упрощает инжектирование свойств.
Идентификация и предотвращение проблем при сборке Maven
Обратите внимание на конфликты плагинов при настройке сборки Maven. Используйте общие компоненты Maven для эффективного управления вашими плагинами.
Наслаждение динамическими конфигурациями с помощью OpenAPI и Spring Boot
Для веб-приложений, использующих OpenAPI и Spring Boot, можно динамически вставить версию в файлы конфигурации API. Это способствует улучшению обнаружения и документирования API.
Полезные материалы
- java – Получение версии артефакта Maven во время выполнения – Stack Overflow — Опыт сообщества в извлечении версии на выполнение.
- TheNEXUS | Сообщество проектов — Подходы к программному определению версий с Maven.
- Apache Maven Resources Plugin – Фильтрация — Инструкции по работе с фильтрацией и заменой placeholders в Maven.
- Apache Maven Archiver – Манифест — Создание манифеста jar-файла с версионной информацией.
- Готовые к производству функции — Использование Actuator Spring Boot для публикации информации о коммитах Git.
- JGit – Документация | Фонд Eclipse — Извлечение информации о коммитах из репозитория Git с помощью JGit.