宁睿 发表于 2024-7-27 11:33:55

gradle 构建项目添加版本信息

gradle 构建项目添加版本信息,打包使用 spring boot 的打包插件
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-parseHEAD'.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;
    }
}
方法1 controller 示例

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

方法2 实验 jar 包中的类实验获取版本信息

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: gradle 构建项目添加版本信息