java程序获取git版本信息

  临近系统上线,总是频繁的更新jar包,导致并不知道测试环境正在运行哪个版本的程序,所以需要在程序中打出版本信息,这时候可以借助maven插件实现该功能。

git-commit-id-plugin

  git-commit-id-plugin插件,该插件可以获取git分支、版本号、提交时间等信息,该插件的中文文档较少,具体细节可以参考官方github: maven-git-commit-id-plugin

  在我的程序中,配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

<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>
//是否单独生成properties文件
<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>
</plugin>

templating-maven-plugin

  已经生成了properties文件,在程序中读取该文件进行输出就可以完成任务,在开发环境中确实如此,但是到了线上环境输出却变成了null,最后也没找到原因。所以我采取了替代方案,产生version.java代码。
  templating-maven-plugin插件可以自动编译/src/main/java-templates文件夹下的代码模版,并替换其中的变量,我的模版如下

1
2
3
4
5
6
7

public class Version {
public static final String BRANCH = "${git.branch}";
public static final String VERSION = "${git.build.version}";
public static final String COMMIT_ID = "${git.commit.id}";
public static final String COMMIT_TIME = "${git.commit.time}";
}

  mvn compile后该类回出现在generate-resources文件夹下,可以被直接引用,从而实现输出版本号的功能。

1
2
3
4
5

logger.info("ferrari branch: {}", Version.BRANCH);
logger.info("ferrari version: {}", Version.VERSION);
logger.info("ferrari commit time: {}", Version.COMMIT_TIME);
logger.info("ferrari commit id: {}", Version.COMMIT_ID);
-------------本文结束感谢您的阅读-------------

本文标题:java程序获取git版本信息

文章作者:小建儿

发布时间:2018年06月25日 - 20:06

最后更新:2018年06月25日 - 21:06

原始链接:http://yajian.github.io/java程序获取git版本信息/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。