gradle中自动生成git提交信息
Posted 恒奇恒毅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle中自动生成git提交信息相关的知识,希望对你有一定的参考价值。
maven有一个git-commit-id插件,可以在打包的时候自动生成git commit相关的信息。对于查看版本是否发布正常非常有意义。
很遗憾gradle却没有。只有自己动手了。
- 首先编写一个gradle文件version-commit.gradle,定义一个gradle的task用于生成git信息,使用默认任务的方式defaultTasks或者在processResources任务之后执行。因为processResources就是专门处理资源文件的,所以生成git信息的文件在processResources之后生成就很合理。
import java.text.SimpleDateFormat
//使用默认task的方式嵌入
//defaultTasks 'versionCommit'
task("versionCommit")
versionCommit()
//在processResources之后执行
processResources.finalizedBy versionCommit
static def versionCommit()
Properties p = new Properties()
p.put("branch", getGitBranch())
p.put("commitId", getGitCommit())
p.put("commitAuthor", getGitCommitAuthor())
p.put("commitTime", getGitCommitTime())
p.put("packageTime", getCurrentTime())
p.store(new FileWriter("src/main/resources/version-commit.properties"), "generated by gradle git info plugin")
static def getGitCommit()
return 'git rev-parse --short HEAD'.execute().text.trim()
static def getGitCommitAuthor()
String commitId = getGitCommit();
String cmd = "git log --pretty=format:%an $commitId -1";
return cmd.execute().text.trim()
static def getGitCommitTime()
String commitId = getGitCommit();
String cmd = "git log --pretty=format:%ai $commitId -1";
return cmd.execute().text.trim();
static def getGitBranch()
return (System.getProperty("version") ?: "1.0-SNAPSHOT").replace("origin/", "")
static def getCurrentTime()
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())
- 然后在build.gradle中引入,在打包的时候就会在类路径下生成version-commit.properties,保存最后一次提交相关的信息。
apply from: "$rootDir/version-commit.gradle"
- 然后在项目启动的时候读取version-commit.properties再打印出来即可。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.InputStream;
import java.util.Properties;
/**
* 记录版本,每次发版打包的时候自动生成git相关信息
* gradle 生成git信息保存在类路径的version-commit.txt中
* @see https://blog.csdn.net/xxssyyyyssxx/article/details/128530853?spm=1001.2014.3001.5501
*/
public class VersionCommit
private static final Logger logger = LoggerFactory.getLogger(VersionCommit.class);
private static final String VERSION_COMMIT_FILE_NAME = "version-commit.properties";
//已实现的这些字段,还可以动态添加其他字段
public static final String BRANCH = "branch";
public static final String COMMIT_ID = "commitId";
public static final String COMMIT_AUTHOR = "commitAuthor";
public static final String COMMIT_TIME = "commitTime";
public static final String PACKAGE_TIME = "packageTime";
public static Map<String, String> fromFile()
Properties v = getVersionCommitInfo();
if(null != v)
HashMap<String, String> map = new HashMap<>(v.size());
for (String n : v.stringPropertyNames())
map.put(n, v.getProperty(n));
return map;
return null;
public static void print()
try
Map<String, String> map = fromFile();
if(null != map)
logger.info("start up successfully with version-commit: \\r\\n ", map);
catch (Exception e)
logger.error(e.getMessage(), e);
private static Properties getVersionCommitInfo()
String fileName = getCommitInfoFileName();
try (InputStream inputStream = VersionCommit.class.getClassLoader().getResourceAsStream(fileName);
)
Properties properties = new Properties();
properties.load(inputStream);
return properties;
catch (Exception e)
//有异常的时候返回null
return null;
/**
* 给一个修改的机会
*/
private static String getCommitInfoFileName()
String fileName = VERSION_COMMIT_FILE_NAME;
String v = System.getProperty("version.commit.file.name");
if(StrUtil.isNotEmpty(v))
fileName = v;
return fileName;
效果如下:
start up successfully with version-commit:
commitId=9ca343594, commitTime=2023-01-01 17:00:00 +0800, branch=feature-123, packageTime=2023-01-01 18:00:00, commitAuthor=someone
- 如果还有其他信息需要输入到version-commit.properties中,在versionCommit方法中加入即可。
以上是关于gradle中自动生成git提交信息的主要内容,如果未能解决你的问题,请参考以下文章
使用gradle构建Android时 版本号versionName中嵌入git提交信息
Android 发布自动版本号方案 ( gradle + git )/ git rev-list HEAD/git describe --tags