自学内容网 自学内容网

gradle 构建项目添加版本信息

gradle 构建项目添加版本信息

build.gradle 配置文件

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'
    }
}

版本信息模型

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 + '\'' +
                '}';
    }
}

版本工具类

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;
    }
}

controller 示例

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

参考连接

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


原文地址:https://blog.csdn.net/power_to_go/article/details/140615601

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!