Git의 태그나 흩어진 정보를 버전 정보로 삽입하기 (Gradle)

7043 단어 GradleJavatech
자바의Gradle 프로젝트에는 버전 정보로 Giit 탭과 산열 정보를 삽입하는 방법이 기록되어 있습니다.
작업을 확인하는 버전은 다음과 같습니다.
  • Java 8
  • Gradle 7.3.2
  • 작업을 확인하는 항목이 등록되었습니다.
  • https://github.com/onozaty/embed-version-samples/tree/main/java-embed-version
  • 포함할 정보


    어떤 상태에서 생성되는지 알기 위해 다음과 같이 설정합니다.
  • version 속성(jar 또는 라이브러리 버전에 추가됨):
    Giit의 라벨 정보를 기반으로 한
  • 라벨이 v1.1.2이면 라벨이 1.1.2이다.v1.0.0-beta1가 되면1.0.0-beta1의 형식으로 한다.-beta1부분도 문제 없음
  • META-INF/MANIFEST.MFImplementation-Version:
    Giit 태그 + 제출 해시 값도 추가되었습니다.
  • 라벨이 v1.1.2라면 산열(8비트)1.1.2.f15325d3도 부여한다.v1.0.0-beta1로 바뀌면1.1.2-beta1.f15325d3의 형식이다.
  • com.palantir.git-version 플러그인


    Git의 다양한 정보를 얻기 위해palantir.git-version 플러그인을 사용합니다.
  • palantir/gradle-git-version: a Gradle plugin that uses `git describe` to produce a version string.
  • git describe --tags --always --first-parent와 같은 정보를 얻을 수 있습니다.

    build.gradle 설정

    build.gradle의 설정 내용입니다.
    전체에 관해서는 아래의 내용을 참조하시오.
  • https://github.com/onozaty/embed-version-samples/blob/main/java-embed-version/build.gradle
  • 플러그인 추가


    com.palantir.git-version을 사용하는 플러그인을 지정합니다.
    plugins {
        id 'java'
        id 'com.palantir.git-version' version '0.12.3'
    }
    

    version 속성, Implementation-Version으로 설정


    Gradle의 version 속성에 탭 정보 기반 정보를 설정합니다.
    또한 META-INF/MANIFEST.MFImplementation-Version에 라벨+해시 정보를 설정합니다.
    def gitInfo = versionDetails()
    version = gitInfo.lastTag.substring(1)
    def implementationVersion = version + '.' + gitInfo.gitHash[0..7]
    
    jar {
        manifest {
            attributes(
                'Implementation-Version' : implementationVersion
            )
        }
    }
    
    이 설정이 종료되었습니다.

    (첨부) 프로그램에서 Implementation-Version 정보 가져오기

    META-INF/MANIFEST.MFImplementation-Version를 프로그램에서 얻을 수 있습니다.
    package com.github.onozaty.embed;
    
    public class Main {
    
        public static void main(String[] args) {
    
            String implementationVersion = getImplementationVersion();
            System.out.println("implementationVersion: " + implementationVersion);
        }
    
        private static String getImplementationVersion() {
            return Main.class.getPackage().getImplementationVersion();
        }
    }
    
    프로그램이 시작될 때의 로그로 표시되면 어느 버전이 실행되었을 때의 로그인지 쉽게 알 수 있습니다.
    그나저나 Spring Boot은 시작할 때 Implementation-Version 의 정보를 읽고 시작 로그로 출력합니다.
    2022-01-07 00:10:11.145  INFO 11772 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication v1.0.0-beta1.86ea7f27 using Java 1.8.0_222 on PCXX with PID 11772 (F:\demo\demo-1.0.0-beta1.jar started by onozaty in F:\demo)
    

    좋은 웹페이지 즐겨찾기