Я использую maven, и моя цель - включить хэш фиксации git в номер версии. Что-то вроде: 1.1.{git_hash}.
Я пытаюсь следовать этому руководству. .
В: можно ли как-то переопределить номер версии, указанный в элементе версии файла pom?
Я использую maven, и моя цель - включить хэш фиксации git в номер версии. Что-то вроде: 1.1.{git_hash}.
Я пытаюсь следовать этому руководству. .
В: можно ли как-то переопределить номер версии, указанный в элементе версии файла pom?
Один из способов добиться этого — использовать git-commit-id-plugin. Добавьте это в список плагинов в разделе build
вашего pom.xml:
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>${git-commit-id-plugin.version}</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
<phase>validate</phase>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
</configuration>
</plugin>
Обратите внимание, что я изменил фазу на validate
, поэтому свойство номера версии уже доступно при упаковке артефакта.
Затем добавьте в раздел build
следующее:
<build>
<finalName>${project.artifactId}-${project.version}-${git.commit.id.describe-short}</finalName>
<!-- your list of plugins -->
</build>
Свойство git.commit.id.describe-short
создается свойством git-commit-id-plugin
. Он содержит текущий номер версии git (укороченный до 7 цифр) и необязательный индикатор dirty
.
Созданный артефакт будет выглядеть так: examplelib-1.0.2-efae3b9.jar
(или examplelib-1.0.2-efae3b9-dirty.jar
, если в вашем репозитории есть незафиксированные изменения).
Кроме того, вы также можете поместить эту информацию в файл MANIFEST.MF вашего артефакта. В таком случае добавьте это в свой список плагинов (в примере предполагается, что артефактом является jar
):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<SCM-Revision>${git.commit.id.describe-short}</SCM-Revision>
</manifestEntries>
</archive>
</configuration>
</plugin>
Дополнительные замечания:
Я показал простую конфигурацию файла git-commit-id-plugin
. На их сайте вы можете найти больше вариантов и свойств. В дополнение к свойствам, которые можно использовать внутри pom.xml, плагин также может генерировать файл свойств, содержащий информацию о ревизии.
В качестве альтернативы git-commit-id-plugin
вы можете предпочесть buildnumber-maven-plugin. Чтобы получить номера версий, этому подключаемому модулю требуется SCM. плагин также настроен в вашем pom.xml.
Эта настройка может мешать другим плагинам, которые преобразуют или переименовывают ваши артефакты (в моем случае это был плагин maven-shade-plugin - один из исходников, который он создает, не содержал правильного номера версии).
pom
, и я получаю сообщение: переменная шаблона «git.commit.id.describe-short» не имеет значения
- person Renann; 29.06.2017
<filtering>true</filtering>
)
- person naXa; 03.01.2018
Приведенный выше принятый ответ не сработал для меня. Я нашел ссылку https://dzone.com/articles/maven-git-commit-id-plugin, откуда я скопировал приведенный ниже код плагина. У меня сработало впервые. Теперь у меня есть файл git.properties, автоматически включенный в мой целевой JAR-файл. Очень удобно для отслеживания.
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.4</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<prefix>git</prefix>
<verbose>false</verbose>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
<format>json</format>
<gitDescribe>
<skip>false</skip>
<always>false</always>
<dirty>-dirty</dirty>
</gitDescribe>
</configuration>
Add finalName to build section to also have the version in the target file name
<build>
<finalName>${project.artifactId}-${project.version}-${git.commit.id.describe-short}</finalName>
...
</build>