欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Maven 插件】为 jar 包添加代码版本信息 —— git-commit-id-plugin

程序员文章站 2022-05-30 10:57:56
...

背景

在软件包中添加代码版本信息是许多组织使用的管理技巧。
这些信息在很多场景中可以发挥重要作用。
对于一些尚处于混沌状态的萌芽组织来说,这些信息几乎可以在排障过程中发挥灯塔的作用。
 

组织管理不善会引发很多“人祸”。
软件包覆盖版本发布?代码分支管理方法混乱?代码 tag 覆盖打?系统出了问题,不知道软件包是哪个分支、哪次提交构建的?
 

一个真实的项目

该项目基于 git 管理代码版本。
之前一直是通过自研的 CI 系统构建;
此 CI 系统会自动获取当前所构建代码的 git 信息,写入文件,添加到最终构建出的软件包中。
 
后来因为某些外部非技术原因,需要在另一套系统中构建软件包。
为了让最终的软件包包含相关 git 信息,就使用了 Maven 插件 git-commit-id-plugin。

 

快速使用 git-commit-id-plugin

此 Maven 插件可以从代码目录中的 .git 目录获取相关信息,写入文件。
该文件可以在Maven打包(package)过程中被包含到 jar 包内。
 

为了方便获取信息,我们可以开放一个接口来呈现此信息文件中的内容。如,一个 HTTP API。
 

配置 git-commit-id-plugin

在工程的 POM 文件中添加对此插件的引用,并添加一些自定义的配置。
(通常是在程序入口所在 jar包 的 POM 中配置。)
以下示例只是一种常用的快速配置样例,它使用了很多默认值。
如:生成的 git 信息文件路径为:${project.build.outputDirectory}/git.properties
可参考官方文档实现自定义配置。
 

<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>pl.project13.maven</groupId>
        <artifactId>git-commit-id-plugin</artifactId>
        <version>3.0.1</version>
        <configuration>
          <generateGitPropertiesFile>true</generateGitPropertiesFile>
          <includeOnlyProperties>
            <includeOnlyProperty>^git.branch$</includeOnlyProperty>
            <includeOnlyProperty>^git.commit.id$</includeOnlyProperty>
            <includeOnlyProperty>^git.dirty$</includeOnlyProperty>
            <includeOnlyProperty>^git.build.time$</includeOnlyProperty>
          </includeOnlyProperties>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

 

添加信息获取接口

上述软件包中的 git 信息获取/发布方式可以有多种实现方案。此处仅提供一种常见的 HTTP API 方式:
 

@RestController
public class InfoController {
  @GetMapping("/git_info")
  public String getGitInfo() throws Exception {
    // 直接将 git 信息文件的内容返回给客户端
    return IOUtils.toString(new URI("classpath:git.properties"), StandardCharsets.UTF_8);
  }
}

 

相关标签: maven git