java - 在 jar 版本中包含 git commit hash

标签 java maven maven-versions-plugin

我正在使用 Maven,我的目标是在版本号中包含 git commit hash。类似于:1.1.{git_hash}。

我正在尝试关注这个 tutorial .

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

最佳答案

实现此目的的一种方法是使用 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,因此在打包 Artifact 时修订号属性已经可用。

然后,将以下内容添加到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 指示符。

生成的 Artifact 将如下所示:examplelib-1.0.2-efae3b9.jar(或 examplelib-1.0.2-efae3b9-dirty.jar,以防万一是您存储库中未提交的更改)。

此外,您可能还想将此信息放入 Artifact 的 MANIFEST.MF 中。在这种情况下,将其添加到您的插件列表中(该示例假定 Artifact 是一个 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. 此设置可能会干扰其他转换或重命名 Artifact 的插件(在我的例子中是 maven-shade-plugin - 它生成的源 jar 之一不包含正确的修订号)。

关于java - 在 jar 版本中包含 git commit hash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40446275/

相关文章:

java - 代码有什么区别?

java - Android 上的转换器应用程序错误

java - Maven 版本 :prepare goal

eclipse - Java XMPP clint 与 smack 4.1 NoClassDefFoundError :

java - 在java中向桌面应用程序发送推送通知

java - 日历不能正常工作

maven 按属性值和版本激活

maven - Gradle 相当于 maven-versions-plugin

java - 对文件递归执行 Maven 命令