Какой самый простой способ получить номер версии из pom.xml maven в коде, то есть программно?
Предполагая, что вы используете Java, вы можете
Создайте .properties
файл в (чаще всего) вашем src/main/resources
каталоге (но на шаге 4 вы можете указать, чтобы он смотрел в другом месте).
Установите значение некоторого свойства в вашем .properties
файле, используя стандартное свойство Maven для версии проекта: foo.bar=${project.version}
В своем коде Java загрузите значение из файла свойств в качестве ресурса из classpath (в Google приведены обильные примеры того, как это сделать, но вот пример для начала ).
В Maven включите фильтрацию ресурсов - это заставит Maven скопировать этот файл в ваши выходные классы и перевести ресурс во время этой копии, интерпретируя свойство. Вы можете найти некоторую информацию здесь, но в основном вы просто делаете это в своей помпе:
<Сборка> <ресурсы> <Ресурс> <Каталог> SRC / основные / ресурсы </ каталог> <Фильтрация> True </ фильтрация> </ Ресурс> </ Ресурсы> </ Сборки>
Вы также можете получить другие стандартные свойства, такие как project.name
, project.description
или даже произвольные свойства, которые вы указали в pom <properties>
и т. Д. Фильтрация ресурсов в сочетании с профилями Maven может дать вам поведение при сборке во время сборки. Когда вы указываете профиль во время выполнения -PmyProfile
, это может включать свойства, которые затем могут отображаться в вашей сборке.
src/main/resources
, так как это может обработать все файлы, расположенные в этом каталоге, включая двоичные файлы. Чтобы избежать непредсказуемого поведения, лучше выполнить фильтрацию поsrc/main/resources-filtered
каталогу, как предлагается здесь . В любом случае, спасибо за этот хороший трюк!Принятый ответ может быть лучшим и наиболее стабильным способом статического получения номера версии в приложении , но на самом деле не отвечает на первоначальный вопрос: как получить номер версии артефакта из pom.xml? Таким образом, я хочу предложить альтернативу, показывающую, как сделать это динамически во время выполнения:
Вы можете использовать сам Maven. Точнее, вы можете использовать библиотеку Maven.
А затем сделать что-то подобное в Java:
Журнал консоли выглядит следующим образом:
Обновление 2017-10-31: Чтобы ответить на дополнительный вопрос Саймона Собиша, я изменил пример следующим образом:
источник
package
d jar (классы зависимостей не интегрированы), и не работает, когдаjar-with-dependencies
я получаю пакет с подключаемым плагином maven. ajava.io.FileNotFoundException: pom.xml
(это в последнем jar какMETA-INF/maven/my.package/myapp/pom.xml
) - какие-либо советы, как решить эту проблему?Упакованные артефакты содержат
META-INF/maven/${groupId}/${artifactId}/pom.properties
файл, содержимое которого выглядит следующим образом:Многие приложения используют этот файл для чтения версии приложения / jar во время выполнения, установка не требуется.
Единственная проблема с вышеупомянутым подходом состоит в том, что этот файл (в настоящее время) генерируется во время
package
фазы и, таким образом, не будет присутствовать во время тестов и т. Д. (Существует проблема Jira, чтобы изменить это, см. MJAR-76 ). Если это проблема для вас, то подход, описанный Алексом, - путь.источник
Существует также метод, описанный в Простом способе отображения номера версии вашего приложения с помощью Maven :
Добавьте это в pom.xml
Тогда используйте это:
Я нашел этот метод проще.
источник
getImplementationVersion()
былаnull
. (maven версия 3.0.4).war
артефактов, не забудьте использоватьmaven-war-plugin
вместоmaven-jar-plugin
getImplementationVersion()
возвращает ноль).Если вы используете упаковку mvn, такую как jar или war, используйте:
Он читает свойство «Version-реализации» сгенерированного файла META-INF / MANIFEST.MF (для которого установлена версия pom.xml) в архиве.
источник
В дополнение к тому, что опубликовал @kieste, я думаю, что это лучший способ сделать информацию о сборке Maven доступной в вашем коде, если вы используете Spring-boot: документация по адресу http://docs.spring.io/spring-boot/ docs / current / reference / htmlsingle / # production-ready-application-info очень полезна.
Вам просто нужно активировать приводы и добавить нужные свойства в ваш
application.properties
илиapplication.yml
источник
Используйте эту библиотеку для простоты простого решения. Добавьте в манифест все, что вам нужно, а затем выполните запрос по строке.
http://manifests.jcabi.com/index.html
источник
Иногда командной строки Maven достаточно для создания сценария, связанного с версией проекта, например, для извлечения артефактов через URL из хранилища:
Пример использования:
источник
Получить версию, используя
this.getClass().getPackage().getImplementationVersion()
PS Не забудьте добавить:
источник
Со ссылкой на ответ кетанкка :
К сожалению, добавление этого связано с тем, как мое приложение работает с ресурсами:
Но с помощью этого тега <manifest> maven-assembly-plugin все получилось:
Таким образом, я смог получить версию, используя
источник