Доступ к версии из Maven pom.xml в коде: простой способ
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы получить доступ к версии Maven-проекта во время выполнения кода, следует воспользоваться фильтрацией ресурсов Maven.
- В
pom.xml
добавьте настройку для фильтрации ресурсов:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
- Создайте файл
version.properties
в директорииsrc/main/resources
и запишите в него следующее:
version=${project.version}
Процесс сборки Maven подставит текущую версию проекта.
- Теперь вы можете считать свойство в Java:
Properties props = new Properties();
props.load(getClass().getResourceAsStream("/version.properties"));
String version = props.getProperty("version");
Готово! Версия проекта Maven теперь доступна из Java-кода.
Применение Maven-профилей для различных ситуаций
Для большей гибкости в процессе сборки с помощью Maven можно использовать профили. Они позволяют настроить файл свойств для разных условий.
<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}
.
Проверка версии в процессе тестирования
Чтобы избежать ошибок при модульных тестах на стадии выполнения из-за отсутствия файла свойств, ваша тестовая конфигурация должна быть настроена аналогично основной.
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
Также стоит рассмотреть возможность настроить maven-jar-plugin для включения информации о версии в MANIFEST.MF
.
<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.
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
в зависимости проекта.
Визуализация
Схема получения информации о версии проекта:
🔍 Проходим путь вместе с кодовым ниндзя.
pom.xml
в Maven — это наша карта:
<properties>
<project.version>1.0.0</project.version>
</properties>
Из карты...
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");
...мы извлекаем ценное сокровище — номер версии:
🔍💼 Всё выполнено! Получили версию: "1.0.0"
От примитивных методов к «швейцарскому ножу» Maven
Maven предоставляет возможности не только для сборки, но и делает исполнение программного кода гибким благодаря параметрам, таким как groupId и artifactId.
String groupId = prop.getProperty("groupId");
String version = prop.getProperty("version");
String artifactId = prop.getProperty("artifactId");
При упаковке Maven эти параметры генерируются автоматически, что может оказаться полезным в процессе выполнения.
Эффективное извлечение версии: создание универсального решения
Для надёжного получения версии проекта следуйте проверенным практикам:
- Расширьте функциональность maven-jar-plugin для настройки
MANIFEST.MF
. - Тщательные тесты подтвердят работоспособность извлечения версии во всех средах.
- Избегайте чтения
pom.xml
в процессе исполнения Maven. Лучше использовать свойства и манифесты.
Таким образом, вы создаёте надёжную и гибкую систему.
Полезные материалы
- Maven – Руководство для начинающих Maven — официальная инструкция по фильтрации Maven.
- Получение версии из файла pom.xml в коде – Stack Overflow — обсуждение доступа к свойствам Maven в Java.
- TheNEXUS | Проект сообщества — подробнее о свойствах и фильтрации ресурсов в Maven.
- Apache Maven Archiver – Справочник — инструкция по добавлению и изменению записей манифеста.
- Документация по Spring Boot — об доступе к свойствам приложения через Spring Boot.
- Плагин Apache Maven Resources – Фильтрация — руководство по фильтрации ресурсов.