속성에 pom.xml 버전과 빌드 날짜를 넣는 방법은 무엇입니까?

속성에 pom.xml 버전과 빌드 날짜를 넣는 방법은 무엇입니까?

2022-10-02 last update

6 minutes reading webapp maven java
Java에서 webapp API 작업을 하는 동안 프론트엔드에 앱 버전과 빌드 날짜를 보내야 합니다. 하지만 이것을 어떻게 만들까요?

내 API 빌드가 maven을 기반으로 하므로 pom.xml 파일에서 버전을 가져오는 것에 대해 생각했습니다. 자, 이렇게 해보자!

해결책! 거의...



리소스 필터링을 담당하는 pom.xml 파일 구성을 입력해야 합니다.

<build>
 <!-- clipped -->
   <resources>
     <resource>
       <directory>src/main/resources</directory>
       <filtering>true</filtering>
     </resource>
   </resources>
</build>


그리고 빌드 중에 대체될 app.properties 속성에서:

build.version=${pom.version}
build.date=${timestamp}


빌드 후 내 app.properties이 예상 데이터로 채워집니다.



이제 POM에서 버전에 액세스하고 Java 앱에서 마지막 빌드에 쉽게 액세스할 수 있습니다!

그리고 fin^H^H... 또 다른 문제인가요?



모든 것이 원활하게 작동하며 pom.xml 버전과 빌드 날짜를 얻을 수 있습니다. 하지만... 파비콘은 이제 고장났습니다! 뭐?!

프런트엔드는 백엔드와 함께 배포됩니다(Javalin static files feature 사용 및 파일은 리소스 폴더에서 로드되었습니다.

리소스 필터링 플러그인이 favicon.ico(실제로 모든 .ico 파일)을 처리하고 잘못 저장하여 손상시킨 것으로 나타났습니다. 따라서 필터링에서 해당 파일을 제외해야 합니다!

마지막 해결책


pom.xml의 최종 구성은 아래 스니펫과 같습니다.

모든 src/main/resources 파일을 제외한 .ico의 모든 파일을 처리합니다. 하지만 리소스 폴더에 .ico을 원합니다. 따라서 추가해야 하지만 필터링(처리)하지 않고 추가해야 합니다.

<build>
 <!-- clipped -->
   <resources>
     <resource>
       <directory>src/main/resources</directory>
       <filtering>true</filtering>
       <excludes>
         <exclude>**/*.ico</exclude>
       </excludes>
     </resource>
     <resource>
       <directory>src/main/resources</directory>
       <filtering>false</filtering>
       <includes>
         <include>**/*.ico</include>
       </includes>
     </resource>
   </resources>
</build>


그게 다야 - 이제 모든 것이 정상입니다 ;-)