여러 profile 을 사용하는 방법 / mavne to gradle / convert / 변환 / 여러 property 사용 방법 / howto / 여러 profile 사용 / 어떻게 profile 마다 다른 properties 를 불러오기 /
gradle 에서 여러 profile 을 사용하는 법
기본적으로 gradlew build
를 하면, 모든
src\main\resources\*.properties
file들이
\build\resources\main\'
에 복사되어지는데, 이때 각 file
마다 expand
(https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html#org.gradle.language.jvm.tasks.ProcessResources:expand(java.util.Map)
작업을 해주게 된다.
processResources {
filesMatching("**/*.properties" ) {
println "expanding (marker replacement) " + it
expand(activatedProperties: 'prod')
}
}
expand
만약 application.properties
에 다음처럼 적어놓으면,
${activatedProperties ?: 'local'}
에 대한 처리를
해준다.
# src\main\resources\application.properties
spring.application.name=myapp
spring.profiles.active=${activatedProperties ?: 'local'}
즉, 최종적으로
build/resources/main/application.properties
파일은 아래처럼
생성된다.
# build/resources/main/application.properties
spring.application.name=myapp
spring.profiles.active=prod
여러 profile 사용
gradle 에서는 -P
옵션으로 여러 profile 을 사용할 수
있다.
gradlew -PbuildProfile=prod build
이것을 이용해서 여러 다른 값을 할당하게 할 수 있다.
다만 주의할점은 resource 가 copy 돼야만,
processResources
가 동작하기 때문에, 대체로 build 하기전에
clean 을 하고 build 를 해야만, processResources 의 내용이 동작할
것이다.
// build.gradle
...
if (!hasProperty('buildProfile')) ext.buildProfile = 'local'
apply from: "profile-${buildProfile}.gradle"
processResources {
filesMatching("**/*.properties" ) {
println "expanding (marker replacement) " + it
expand(activatedProperties2: project.buildId)
}
}
// profile-local.gradle
ext.buildId = 'local'
// profile-prod.gradle
ext.buildId = 'prod'
maven pom.xml
이것을 maven 의 pom.xml 로 구현하면 다음과 같다.
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<profiles>
<profile>
<id>local</id>
<properties>
<activatedProperties>local</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
</profiles>
# src\main\resources\application.properties
spring.application.name=myapp
spring.profiles.active=@activatedProperties@
/src/main/resources
|
+ application-local.properties
|
\ application-prod.properties
댓글 없음:
댓글 쓰기