maven 3.0.4를 사용하고 있으며 내 애플리케이션에서 빌드 타임 스탬프에 액세스 할 수 있도록하고 싶습니다. 이를 위해 .properties
파일에 자리 표시자를 넣고 maven이 빌드시 필터링하도록합니다. 이것에 대해 잘 작동하지만 ${project.version}
, ${maven.build.timestamp}
필터링 치환되지 않는다.
이 속성은 빌드에서 사용할 수있는 것 같습니다.이 속성을 사용하여 아티팩트 이름을 수정할 수 있습니다.
<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
그렇다면 왜 리소스 필터링에 사용할 수 없습니까? 그리고 더 중요한 것은 어떻게 액세스 할 수있게 만들까요?
답변
이 기사를 발견 하여 maven 의 버그 로 인해 빌드 타임 스탬프가 필터링에 전파되지 않는다고 설명했습니다 . 해결 방법은 타임 스탬프를 다른 속성으로 래핑하는 것입니다.
<properties>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
</properties>
그러면 필터링이 예상대로 작동합니다.
buildTimestamp=${timestamp}
답변
이제 Maven 3.x {maven.build.timestamp}
가 “작동 중” 임을 확인할 수 있습니다 . 그들은 arounded 일 분명히 문제를. properties
더 이상 추가 해결 방법이 필요하지 않습니다.
그러나 “필터링”플러그인 (maven-resources-plugin)이 최신 상태임을주의하십시오. 비교적 새 mvn help:effective-pom
버전 이어야하므로 이전 버전 (예 : 2.6)이 표시되면 더 새로운 버전으로 변경하고 3.x 예를 들어 수정했습니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<properties><timestamp>...
해결 방법이 더 이상 필요하지 않습니다 …
이것은 또한 IntelliJ에서 작동하지만 명령 줄에서는 작동하지 않는 이유를 정리했습니다. IntelliJ는 아마도 자신의 “수정 된 / 내부”maven 상수를 사용하므로 거기에서 작동했지만 maven 명령 줄에서는 작동하지 않았습니다.
또한 필터링 리소스 디렉터리를 pom에 추가하면 기본 디렉터리를 “다시 추가”해야 할 수도 있습니다. 예를 들어 다음과 같이 손실됩니다.
<resource>
<directory>src/main/resources-filtered</directory> <!-- to get "maven.build.timestamp" into resource properties file -->
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory> <!-- apparently have to add this is you have the other... -->
</resource>
NB 부모로 스프링 부트를 사용하는 경우 @ maven.build.timestamp @ 대신 사용해야 합니다 . 또한 스프링 부트를 사용하는 경우 읽을 수있는에 META-INF/build-info.properties
의해 선택적으로 생성 된 파일 이 spring-boot-maven-plugin
있습니다 (스프링은 읽기 편의를 위해 빈을 제공합니다).BuildProperties
답변
저와 같은 다른 사람들을 위해 Stackoverflow 콘텐츠를 풍부하게하기 위해이 게시물이의 “문제”를 해결하는 방법으로 발견되었습니다 ${maven.build.timestamp}
. 이것은 maven 버그가 아니지만 이 게시물 에서 볼 수 있듯이 m2e의 예상되는 동작입니다 .
따라서 내가 이해 한 바에 따르면 수정에는 개념적 문제가 포함되기 때문에 해결책이 “수정”될 것으로 기대할 수 없다고 생각합니다.
제 경우에는 다른 게시물에buildnumber-maven-plugin
설명 된대로 플러그인 ( )을 사용 했습니다 .
답변
pom 프로젝트 수준에서 Maven 속성을 추가하면 올바른 로컬 시간대가 고려되지 않으므로 타임 스탬프가 잘못 표시 될 수 있습니다.
<properties><timestamp>${maven.build.timestamp}</timestamp></properties>
build-helper-maven-plugin을 사용하면 올바른 시간대와 현재 일광 절약 시간이 타임 스탬프에 적용됩니다.
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>timestamp</name>
<pattern>yyyy-MM-dd HH:mm:ss</pattern>
<timeZone>Europe/Zurich</timeZone>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
패키징 할 때 Maven은 / resources 폴더의 모든 토큰 타임 스탬프 (예 : resources / version.properties)를 대체합니다.
build.timestamp = $ {timestamp}
그런 다음 응용 프로그램에서이 속성 파일을로드 할 수 있습니다.