在 jar 版本中包含 git commit 哈希

2022-09-01 15:23:15

我正在使用maven,我的目标是在版本号中包含git提交哈希。类似 : 1.1.{git_hash}.

我正在尝试遵循本教程

问:是否可以以某种方式覆盖 pom 文件的版本元素中指定的版本号?


答案 1

实现这一目标的一种方法是使用git-commit-id-plugin。将其添加到pom.xml部分的插件列表中:build

<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 修订版号(缩短为 7 位数字)和一个可选指示器。git.commit.id.describe-shortgit-commit-id-plugindirty

生成的工件将如下所示:(或者如果您的存储库上有未提交的更改)。examplelib-1.0.2-efae3b9.jarexamplelib-1.0.2-efae3b9-dirty.jar

此外,您可能还希望将此信息放入清单。您的工件的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. 我已经展示了.在他们的网站上,您可能会找到更多选项和属性。除了可以在pom.xml中使用的属性之外,该插件还可以生成包含有关修订版本信息的属性文件。git-commit-id-plugin

  2. 作为 的替代方法,您可能更喜欢 buildnumber-maven-plugin。为了获得修订版号,此插件需要一个SCM插件,该插件也在pom.xml中配置。git-commit-id-plugin

  3. 此设置可能会干扰转换或重命名工件的其他插件(在我的情况下,它是maven-shade-插件 - 它生成的源jar之一不包含正确的修订版号)。


答案 2

上述被接受的答案对我不起作用。我发现链接 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>

将 finalName 添加到构建部分,以便在目标文件名中也包含版本

<build>

<finalName>${project.artifactId}-${project.version}-${git.commit.id.describe-short}</finalName>

...

</build>

推荐