Доступ к версии из Maven pom.xml в коде: простой способ

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы получить доступ к версии Maven-проекта во время выполнения кода, следует воспользоваться фильтрацией ресурсов Maven.

  1. В pom.xml добавьте настройку для фильтрации ресурсов:
xml
Скопировать код
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>
  1. Создайте файл version.properties в директории src/main/resources и запишите в него следующее:
version=${project.version}

Процесс сборки Maven подставит текущую версию проекта.

  1. Теперь вы можете считать свойство в Java:
Java
Скопировать код
Properties props = new Properties();
props.load(getClass().getResourceAsStream("/version.properties"));
String version = props.getProperty("version");

Готово! Версия проекта Maven теперь доступна из Java-кода.

Кинга Идем в IT: пошаговый план для смены профессии

Применение Maven-профилей для различных ситуаций

Для большей гибкости в процессе сборки с помощью Maven можно использовать профили. Они позволяют настроить файл свойств для разных условий.

xml
Скопировать код
<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <env.version>1.0.0-SNAPSHOT</env.version>
    </properties>
  </profile>
  <profile>
    <id>release</id>
    <properties>
      <env.version>${project.version}</env.version>
    </properties>
  </profile>
</profiles>

Не забудьте, что фильтрация ресурсов должна быть сконфигурирована на ${env.version}.

Проверка версии в процессе тестирования

Чтобы избежать ошибок при модульных тестах на стадии выполнения из-за отсутствия файла свойств, ваша тестовая конфигурация должна быть настроена аналогично основной.

xml
Скопировать код
<testResources>
  <testResource>
    <directory>src/test/resources</directory>
    <filtering>true</filtering>
  </testResource>
</testResources>

Также стоит рассмотреть возможность настроить maven-jar-plugin для включения информации о версии в MANIFEST.MF.

xml
Скопировать код
<plugin>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
      </manifest>
    </archive>
  </configuration>
</plugin>

Это гарантирует, что метод App.class.getPackage().getImplementationVersion() сможет предоставить требуемые данные.

Парсинг pom.xml с помощью программных средств

Если вам нужно прочитать pom.xml напрямую, воспользуйтесь библиотеками Apache Maven.

Java
Скопировать код
MavenXpp3Reader reader = new MavenXpp3Reader();
Model model;
if ((new File("pom.xml")).exists())
  model = reader.read(new FileReader("pom.xml"));
else
  model = reader.read(
    new InputStreamReader(
      App.class.getResourceAsStream("/META-INF/maven/project.groupId/project.artifactId/pom.xml")
    )
  );
String version = model.getVersion();

Не забудьте добавить maven-model в зависимости проекта.

Визуализация

Схема получения информации о версии проекта:

Markdown
Скопировать код
🔍 Проходим путь вместе с кодовым ниндзя.

pom.xml в Maven — это наша карта:

xml
Скопировать код
<properties>
    <project.version>1.0.0</project.version>
</properties>

Из карты...

Java
Скопировать код
InputStream input = getClass().getResourceAsStream("/META-INF/maven/project.groupId/project.artifactId/pom.properties");
Properties prop = new Properties();
prop.load(input);
String version = prop.getProperty("version");

...мы извлекаем ценное сокровище — номер версии:

Markdown
Скопировать код
🔍💼 Всё выполнено! Получили версию: "1.0.0"

От примитивных методов к «швейцарскому ножу» Maven

Maven предоставляет возможности не только для сборки, но и делает исполнение программного кода гибким благодаря параметрам, таким как groupId и artifactId.

Java
Скопировать код
String groupId = prop.getProperty("groupId");
String version = prop.getProperty("version");
String artifactId = prop.getProperty("artifactId");

При упаковке Maven эти параметры генерируются автоматически, что может оказаться полезным в процессе выполнения.

Эффективное извлечение версии: создание универсального решения

Для надёжного получения версии проекта следуйте проверенным практикам:

  • Расширьте функциональность maven-jar-plugin для настройки MANIFEST.MF.
  • Тщательные тесты подтвердят работоспособность извлечения версии во всех средах.
  • Избегайте чтения pom.xml в процессе исполнения Maven. Лучше использовать свойства и манифесты.

Таким образом, вы создаёте надёжную и гибкую систему.

Полезные материалы

  1. Maven – Руководство для начинающих Maven — официальная инструкция по фильтрации Maven.
  2. Получение версии из файла pom.xml в коде – Stack Overflow — обсуждение доступа к свойствам Maven в Java.
  3. TheNEXUS | Проект сообщества — подробнее о свойствах и фильтрации ресурсов в Maven.
  4. Apache Maven Archiver – Справочник — инструкция по добавлению и изменению записей манифеста.
  5. Документация по Spring Boot — об доступе к свойствам приложения через Spring Boot.
  6. Плагин Apache Maven Resources – Фильтрация — руководство по фильтрации ресурсов.