【问题标题】:Include git commit hash in jar version在 jar 版本中包含 git commit hash
【发布时间】:2017-03-19 16:20:10
【问题描述】:

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

我正在尝试关注这个tutorial

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

【问题讨论】:

    标签: java maven maven-versions-plugin


    【解决方案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.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 - 它生成的源 jar 之一不包含正确的修订号)。

    【讨论】:

    • 你是怎么做到的?变量没有暴露给pom,我收到消息:模板变量'git.commit.id.describe-short'没有价值
    • 在“git-commit-id-plugin”定义中,我将执行阶段更改为“验证”,因此在打包工件时修订号属性已经可用。
    • 请注意,资源过滤对于这个插件的工作很重要,不要忽略它! (&lt;filtering&gt;true&lt;/filtering&gt;)
    • “尽管这个插件试图与每个 Maven 版本兼容,但特定版本有一些已知的限制。”查看compatibility table
    【解决方案2】:

    上述接受的答案对我不起作用。我找到了链接https://dzone.com/articles/maven-git-commit-id-plugin,我从那里复制了下面的插件代码。它第一次对我有用。现在,我的目标 JAR 文件中自动包含了 git.properties 文件。对于跟踪非常有用。

    <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>
    

    【讨论】:

    • 我遇到的问题是我正在使用阴影库来创建超级罐子。 ID插件只标记正常的jar文件,没用
    猜你喜欢
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2017-04-22
    相关资源
    最近更新 更多