Включить хэш git commit в jar-версию

Я использую maven, и моя цель - включить хэш фиксации git в номер версии. Что-то вроде: 1.1.{git_hash}.

Я пытаюсь следовать этому руководству. .

В: можно ли как-то переопределить номер версии, указанный в элементе версии файла pom?


person Herr Kater    schedule 06.11.2016    source источник


Ответы (2)


Один из способов добиться этого — использовать 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>

Дополнительные замечания:

  1. Я показал простую конфигурацию файла git-commit-id-plugin. На их сайте вы можете найти больше вариантов и свойств. В дополнение к свойствам, которые можно использовать внутри pom.xml, плагин также может генерировать файл свойств, содержащий информацию о ревизии.

  2. В качестве альтернативы git-commit-id-plugin вы можете предпочесть buildnumber-maven-plugin. Чтобы получить номера версий, этому подключаемому модулю требуется SCM. плагин также настроен в вашем pom.xml.

  3. Эта настройка может мешать другим плагинам, которые преобразуют или переименовывают ваши артефакты (в моем случае это был плагин maven-shade-plugin - один из исходников, который он создает, не содержал правильного номера версии).

person user3078523    schedule 12.04.2017
comment
как вы заставили это работать? переменные не отображаются для pom, и я получаю сообщение: переменная шаблона «git.commit.id.describe-short» не имеет значения - person Renann; 29.06.2017
comment
В определении «git-commit-id-plugin» я изменил фазу выполнения на «проверить», поэтому свойство номера версии уже доступно при упаковке артефакта. - person user3078523; 02.07.2017
comment
Обратите внимание, что фильтрация ресурсов важна для работы этого плагина, не пропускайте ее! (<filtering>true</filtering>) - person naXa; 03.01.2018
comment
Несмотря на то, что этот подключаемый модуль пытается быть совместимым со всеми версиями Maven, существуют некоторые известные ограничения для определенных версий. Проверьте это таблица совместимости. - 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>
person DAB    schedule 22.09.2019
comment
Проблема, с которой я столкнулся, заключается в том, что я использую библиотеку теней для создания убер-банок. Плагин ID помечает только обычный файл jar, что бесполезно. - person TheRealChx101; 28.05.2020