Maven Build Profiles
Maven Profile
배포환경에 따라 설정파일이나 리소스파일을 다르게 패키징 해야하는 경우가 있다.
maven에서는 Profile 설정 만으로 간편하게 각 profile별로 패키징 할 수 있다.
배포환경마다 달라질 수 있는 정보로는 다음과 같은 경우가 보편적이다.
- DB property : 각 환경별로 사용하는 DB가 다른 경우
- Logging level: 개발환경은 logging level이 debug라면 운영환경은 error 와 같이 상위 level로 하는 경우
- resource : 각 환경 별로 resource 값이나 경로가 다른 경우
Maven Profile 설정으로 배포환경에 따른 패키징 하기
dev(개발환경), test(테스트환경), release(운영환경)으로 나누었다.
src/main/java/{dev,test,release}에 각 환경별 db.properties 파일을 추가하였다.
profile-sample
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ ├── resources
│ │ │ ├── dev
│ │ │ │ └── db.properties
│ │ │ ├── release
│ │ │ │ └── db.properties
│ │ │ └── test
│ │ │ └── db.properties
pom.xml에 profiles에 각 환경 별 profile을 추가하였다.
<profiles>
<!-- Development server -->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>dev</env>
</properties>
</profile>
<!-- test server -->
<profile>
<id>beta</id>
<properties>
<env>beta</env>
</properties>
</profile>
<!-- release server -->
<profile>
<id>release</id>
<properties>
<env>release</env>
</properties>
</profile>
</profiles>
각 환경별로 resource의 경로를 설정해준다.
${env}는 profile에 설정한 properties의
<build>
<resources>
<resource>
<directory>src/main/resources/${env}</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources/resources/${env}</directory>
</testResource>
</testResources>
</build>
각 환경별로 패키징을 하려면 mvn clean package -P “프로파일id” 로 실행한다.
mvn clean package dev
mvn clean package test
mvn clean package release
(만일 -P 옵션을 제거하고 패키징한다면, profile에 activeByDefault로 설정된 dev profile로 패키징된다.)
각 profile별로 db.properties가 배포 파일에 추가된 것을 확인 할 수 있다.