[java] 코드에서 maven pom.xml에서 버전 검색


3 Answers

패키지 아티팩트는 다음과 같은 내용의 META-INF/maven/${groupId}/${artifactId}/pom.properties 파일을 포함합니다.

#Generated by Maven
#Sun Feb 21 23:38:24 GMT 2010
version=2.5
groupId=commons-lang
artifactId=commons-lang

많은 응용 프로그램은이 파일을 사용하여 런타임에 응용 프로그램 / jar 버전을 읽습니다. 설정이 필요하지 않습니다.

위 접근법의 유일한 문제점은이 파일이 package 단계에서 생성되었으므로 테스트 중에는 존재하지 않는다는 것입니다 (이를 변경하기위한 Jira 문제가 있습니다, MJAR-76 참조). 이것이 당신에게 이슈가된다면, Alex가 묘사 한 접근법이 나아갈 길입니다.

Question

프로그래밍 방식으로 코드에서 maven의 pom.xml에서 버전 번호를 검색하는 가장 간단한 방법은 무엇입니까?




스프링 부트 프로젝트에서는 다음과 같이 할 수 있습니다.

PropertiesConfigurationFactory<Map<String, Object>> factory = 
   new PropertiesConfigurationFactory<Map<String, Object>>(
      new LinkedHashMap<String, Object>());
factory.setTargetName("info");
factory.setPropertySources(environment.getPropertySources());
Map<String, Object> infoMap = factory.getObject();

infoMap 에는 POM의 버전을 비롯한 빌드 정보가 포함 된지도 가 포함되어 있습니다.

나는 스프링 - 부트 프로젝트의 EndpointAutoConfiguration 클래스에서 그것을 발견했다.

@see https://github.com/spring-projects/spring-boot/blob/master/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointAutoConfiguration.java




@kieste가 게시 한 내용을 보완하기 위해 스프링 부트를 사용하는 경우 Maven 빌드 정보를 코드에서 사용할 수있는 가장 좋은 방법이라고 생각합니다. http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-application-info 의 설명서 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-application-info 는 매우 유용합니다.

액추에이터를 활성화하고 application.properties 또는 application.yml 필요한 속성을 추가하면 application.yml

Automatic property expansion using Maven

You can automatically expand info properties from the Maven project using resource filtering. If you use the spring-boot-starter-parent you can then refer to your Maven ‘project properties’ via @..@ placeholders, e.g.

project.artifactId=myproject
project.name=Demo
project.version=X.X.X.X
project.description=Demo project for info endpoint
info.build.artifact=@project.artifactId@
info.build.name=@project.name@
info.build.description=@project.description@
info.build.version=@project.version@



또한 Maven을 사용하여 앱 버전 번호를 표시하는 쉬운 방법에 설명 된 방법이 있습니다 .

이것을 pom.xml에 추가하십시오

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>test.App</mainClass>
            <addDefaultImplementationEntries>
              true
            </addDefaultImplementationEntries>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

다음을 사용하십시오.

App.class.getPackage().getImplementationVersion()

나는이 방법이 더 간단하다는 것을 발견했다.




Related