gradle 构建项目添加版本信息

gradle 构建项目添加版本信息,打包使用 spring boot 的打包插件

build.gradle 配置文件

groovy 复制代码
bootJar {
    manifest {
        attributes(
                'Project-Name': project.name,
                'Project-Version': project.version,
                "project-Vendor": "XXX Corp",
                "Built-By": "Gradle ${gradle.gradleVersion}",
                "Built-At": new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()),
                'Git-Branch': getGitBranch(),
                'Git-Commit': getGitCommit(),
                'Git-Commit-Time': getGitCommitTime()
        )

    }
}

// 获取当前分支名称
static def getGitBranch() {
    try {
        def branch = 'git rev-parse --abbrev-ref HEAD'.execute().text.trim()
        return branch ?: 'unknown'
    } catch (Exception e) {
        System.err.println("fail to get branch, errMsg:" + e.getMessage())
        return 'unknown'
    }
}

// 获取当前提交的记录的commitId
static def getGitCommit() {
    try {
        def commit = 'git rev-parse  HEAD'.execute().text.trim()
        return commit ?: 'unknown'
    } catch (Exception e) {
        System.err.println("fail to get commit id, errMsg:" + e.getMessage())
        return 'unknown'
    }
}

// 获取当前Git提交的时间
static def getGitCommitTime() {
    try {
        def commitTime = 'git show -s --format=%ct HEAD'.execute().text.trim()
        return commitTime ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(Long.parseLong(commitTime) * 1000L)) : 'unknown'
    } catch (Exception e) {
        System.err.println("fail to get commit time, errMsg:" + e.getMessage())
        return 'unknown'
    }
}

版本信息模型

java 复制代码
public class VersionModel {
    private String projectName;
    private String projectVersion;
    private String projectVendor;
    private String builtBy;
    private String builtAt;
    private String gitBranch;
    private String gitCommit;
    private String gitCommitTime;

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public String getProjectVersion() {
        return projectVersion;
    }

    public void setProjectVersion(String projectVersion) {
        this.projectVersion = projectVersion;
    }

    public String getProjectVendor() {
        return projectVendor;
    }

    public void setProjectVendor(String projectVendor) {
        this.projectVendor = projectVendor;
    }

    public String getBuiltBy() {
        return builtBy;
    }

    public void setBuiltBy(String builtBy) {
        this.builtBy = builtBy;
    }

    public String getBuiltAt() {
        return builtAt;
    }

    public void setBuiltAt(String builtAt) {
        this.builtAt = builtAt;
    }

    public String getGitBranch() {
        return gitBranch;
    }

    public void setGitBranch(String gitBranch) {
        this.gitBranch = gitBranch;
    }

    public String getGitCommit() {
        return gitCommit;
    }

    public void setGitCommit(String gitCommit) {
        this.gitCommit = gitCommit;
    }

    public String getGitCommitTime() {
        return gitCommitTime;
    }

    public void setGitCommitTime(String gitCommitTime) {
        this.gitCommitTime = gitCommitTime;
    }

    @Override
    public String toString() {
        return "VersionModel{" +
                "projectName='" + projectName + '\'' +
                ", projectVersion='" + projectVersion + '\'' +
                ", implementationVendor='" + projectVendor + '\'' +
                ", builtBy='" + builtBy + '\'' +
                ", builtAt='" + builtAt + '\'' +
                ", gitBranch='" + gitBranch + '\'' +
                ", gitCommit='" + gitCommit + '\'' +
                ", gitCommitTime='" + gitCommitTime + '\'' +
                '}';
    }
}

版本工具类

java 复制代码
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.jar.Attributes;
import java.util.jar.Manifest;

public class BuildUtils {
    public static final String projectName = "Project-Name";
    public static final String projectVersion = "Project-Version";
    public static final String projectVendor = "Project-Vendor";
    public static final String builtBy = "Built-By";
    public static final String builtAt = "Built-At";
    public static final String gitBranch = "Git-Branch";
    public static final String gitCommit = "Git-Commit";
    public static final String gitCommitTime = "Git-Commit-Time";
    private static final Logger log = LoggerFactory.getLogger(BuildUtils.class);

    public static String getManifestAttribute(String attributeName) {
        try {
            Manifest manifest = new Manifest(BuildUtils.class.getResourceAsStream("/META-INF/MANIFEST.MF"));
            Attributes attributes = manifest.getMainAttributes();
            return attributes.getValue(attributeName);
        } catch (IOException e) {
            log.warn("fail to get info from manifest file, errMsg:{}", e.getMessage(), e);
            return "unknown";
        }
    }

    public static Attributes getManifestAttribute() {
        try {
            Manifest manifest = new Manifest(BuildUtils.class.getResourceAsStream("/META-INF/MANIFEST.MF"));
            return manifest.getMainAttributes();
        } catch (IOException e) {
            log.warn("fail to get info from manifest file, errMsg:{}", e.getMessage(), e);
            return new Attributes();
        }
    }

    public static String getManifestAttributeJsonFormat() {
        return JSONObject.toJSONString(getVersionModel(), true);
    }

    public static VersionModel getVersionModel() {
        VersionModel versionModel = new VersionModel();
        try {
            Manifest manifest = new Manifest(BuildUtils.class.getResourceAsStream("/META-INF/MANIFEST.MF"));
            versionModel.setBuiltAt(manifest.getMainAttributes().getValue(builtAt));
            versionModel.setBuiltBy(manifest.getMainAttributes().getValue(builtBy));
            versionModel.setProjectName(manifest.getMainAttributes().getValue(projectName));
            versionModel.setProjectVersion(manifest.getMainAttributes().getValue(projectVersion));
            versionModel.setProjectVendor(manifest.getMainAttributes().getValue(projectVendor));
            versionModel.setGitBranch(manifest.getMainAttributes().getValue(gitBranch));
            versionModel.setGitCommit(manifest.getMainAttributes().getValue(gitCommit));
            versionModel.setGitCommitTime(manifest.getMainAttributes().getValue(gitCommitTime));
        } catch (IOException e) {
            log.warn("fail to get info from manifest file, errMsg:{}", e.getMessage(), e);
        }
        return versionModel;
    }
}

方法1 controller 示例

java 复制代码
@RestController
@RequestMapping("/version")
public class VersionController {
    @GetMapping("/build")
    public VersionModel getVersionModel(){
        return BuildUtils.getVersionModel();
    }
}

方法2 执行 jar 包中的类执行获取版本信息

java 复制代码
package com.version;
public class Version {
    public static void main(String[] args) {
        System.out.println(BuildUtils.getManifestAttributeJsonFormat());
    }
}

java -cp you-app.jar -Dloader.main=com.version.Version org.springframework.boot.loader.PropertiesLauncher

参考连接

https://blog.csdn.net/russle/article/details/130658805

相关推荐
佚先森3 分钟前
2024ARM网络验证 支持一键云注入引流弹窗注册机 一键脱壳APP加固搭建程序源码及教程
java·html
古月居GYH17 分钟前
在C++上实现反射用法
java·开发语言·c++
儿时可乖了1 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
ruleslol1 小时前
java基础概念37:正则表达式2-爬虫
java
xmh-sxh-13141 小时前
jdk各个版本介绍
java
天天扭码2 小时前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶2 小时前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺2 小时前
Spring Boot框架Starter组件整理
java·spring boot·后端