codememo

애플리케이션 버전이 Spring Boot 배너에 표시되지 않습니다.txt

tipmemo 2023. 2. 22. 21:57
반응형

애플리케이션 버전이 Spring Boot 배너에 표시되지 않습니다.txt

배너에 정의되어 있는 어플리케이션버전응용 프로그램 실행 시 콘솔에 txt가 표시되지 않습니다.Spring Boot 매뉴얼에 따라 정의됩니다.

${application.version}

이 프로젝트에서는 spring-boot-boot-parent를 부모 폼으로 사용합니다(start.spring.io에서 기본 프로젝트 셋업).

좋아요, 프로젝트를 만들고 java -jar를 통해 실행하면 버전이 출력됩니다.다만, IDE(IntelliJ IDEA)로 애플리케이션을 기동하면, 버전이 인쇄되지 않습니다.

배너 커스터마이즈에 관한 Spring Boot 매뉴얼에 따르면,${application.version}항아리 매니페스토에서 꺼낸 거예요

매니페스트에 선언된 응용 프로그램의 버전 번호입니다.MF(예: Implementation-Version: 1.0)는 1.0으로 인쇄됩니다.

IDE에서 실행할 경우 IDE에서 컴파일된 클래스 파일에 대해 실행되는 것이 일반적입니다.IDE는 보통 매니페스토를 사용하여 항아리 전체를 만드는 전체 사이클을 거치지 않습니다.따라서 매니페스트는 없습니다. 시 사용 가능한 로 MF 값을 할 수 .${application.version}이치노

이것은 코드의 버그가 아닙니다.또한 완전한 jar build를 실행했을 때 정상적으로 동작하는 것을 이미 알고 있습니다.IDE를 실행하면서 이 문제를 해결하는 것이 정말 중요한 경우 먼저 전체 jar 빌드 및 매니페스트 생성을 수행하는 사용자 지정 빌드 단계를 설정하는 것을 고려해 보십시오.하지만 그건 과잉 살상일 수도 있어요.배너는 나중에 실제 릴리스 빌드와 대조하여 IDE 외부에서 검증할 수 있습니다.

또 다른 솔루션:

maven resources 플러그인을 사용하여 리소스 파일의 속성을 "필터링"(바꾸기)합니다.

POM에서 다음 정의를 사용하여 리소스 필터링을 활성화합니다.

<resources>
    <resource>
        <filtering>true</filtering>
        <directory>src/main/resources</directory>
        <includes>
            <include>application.properties</include>
        </includes>
    </resource>
</resources>

application.properties 파일에서 다음을 수행합니다.

info.app.name=@project.artifactId@
info.app.version=@project.version@

배너에.txt 파일:

${info.app.name} (${info.app.version})

참고로 그래들 기반 프로젝트(Spring Boot Gradle 플러그인 사용)를 사용하는 Spring Boot 2의 명령줄에 대해 다음과 같은 작업을 수행할 수 있습니다.Intelij의 콘솔은 아직 작동하지 않지만, 그 문제는 몇 년 전부터 계속되고 있습니다.

「 」의 jar표준 2.0.5에서는 작업이 제대로 수행되지 않았습니다.build.gradle태스크가 우선되기 때문입니다.

기본적으로 bootJar 또는 bootWar 작업이 구성되면 jar 또는 war 작업이 비활성화됩니다.

그래서 제가 한번 해봤는데bootJar다음과 같은 작업을 수행할 수 있습니다.

version = '0.0.1-SNAPSHOT'

bootJar {
    mainClassName = 'com.demo.Application'
    manifest {
        attributes('Implementation-Title':   'Demo Application',
                   'Implementation-Version': version)
    }
}

주의: 다음 항목은 필요 없습니다.mainClassName메인 클래스가 1개뿐인 경우동등한 클래스입니다.검색되거나 구성된 기본 클래스가 MANIFIST에 자동으로 추가됩니다.MF를 'Start-Class'로 지정합니다.

이 기능이 작동하면${application.title}그리고.${application.version}Spring Boot 배너에 기재되어 있는 것과 같습니다.txt 파일.

제 경우 spring-boot-maven-plugin에 의해 작성된 매니페스트 내부를 보면 Implementation-version이 없습니다.

이를 추가하기 위해 플러그인 maven-jar-plugin을 빌드에 추가합니다.pom.xml의 플러그인 섹션을 참조하십시오.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
         <archive>
              <manifestEntries>
                    <Implementation-Version>${project.version}</Implementation-Version>
              </manifestEntries>
         </archive>
    </configuration>
</plugin>

그 후 이미 언급했듯이 java-jar et를 ide로 하지 않을 때에만 어플리케이션 버전의 배너를 볼 수 있습니다.

배너에서 리소스 필터링을 사용할 수도 있습니다.txt. 그냥 ${프로젝트 사용.version}이(가) 표시됩니다.txt

maven의 예:

<resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>banner.txt</include>
                </includes>
            </resource>
        </resources>

내 작업은 mvn 빌드의 텍스트를 다음과 같이 완전히 대체한다.

com.google.code.maven-capacer-displays

  <plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
    <executions>
      <execution>
        <phase>prepare-package</phase>
        <goals>
          <goal>replace</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <file>target/classes/banner.txt</file>
      <replacements>
        <replacement>
          <token>application.title</token>
          <value>${artifactId}</value>
        </replacement>
        <replacement>
          <token>application.version</token>
          <value>${version}</value>
        </replacement>
      </replacements>
    </configuration>
  </plugin>

네, 배너에서 ${}를 삭제했습니다.txt

기본적으로 ${application.title} ${application}입니다.formated-version} 값은 패키징된 jar 파일의 매니페스트 파일에서 선택됩니다.따라서 프로젝트의 빌드 라이프 사이클 중에 실제로 출력할 수 있을지는 잘 모르겠습니다.여기에 링크 설명을 입력합니다.

아래의 예를 참조할 수 있습니다.

언급URL : https://stackoverflow.com/questions/34519759/application-version-does-not-show-up-in-spring-boot-banner-txt

반응형