gradle中自动生成git提交信息

maven有一个git-commit-id插件,可以在打包的时候自动生成git commit相关的信息。对于查看版本是否发布正常非常有意义。
很遗憾gradle却没有。只有自己动手了。

  1. 首先编写一个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())
}


  1. 然后在build.gradle中引入,在打包的时候就会在类路径下生成version-commit.properties,保存最后一次提交相关的信息。
apply from: "$rootDir/version-commit.gradle"
  1. 然后在项目启动的时候读取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}

  1. 如果还有其他信息需要输入到version-commit.properties中,在versionCommit方法中加入即可。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值