通過配置文件支持多環(huán)境構(gòu)建
除了通過傳入?yún)?shù)加載不同目錄下的properties文件來實現(xiàn)多環(huán)境打包之外,還有一種更便捷的方式來實現(xiàn)這種操作.
借助Groovy的ConfigSlurper特性可以簡潔而明快的達(dá)到多環(huán)境打包的目的.打包時候僅需通過-D
參數(shù)傳入目標(biāo)環(huán)境變量即可如:gradle build -Denv=dev
,這里可以通過添加gradle.properties
文件設(shè)置默認(rèn)的環(huán)境變量值.
比如當(dāng)前有如下需求:
- 需要根據(jù)傳入的變量參數(shù)進(jìn)行不同環(huán)境打包
- 需要根據(jù)不同環(huán)境參數(shù)改變esources目錄下屬性文件\xml文件等文件的內(nèi)容
1.與build.gradle
平級建立config.groovy
,這里的命名可以隨意.
environments {
// 開發(fā)環(huán)境
dev {
db {
username = "dev"
password = 'devpwd'
}
}
// 線上環(huán)境
production {
db {
username = "prod"
password = 'prodpwd'
}
}
}
2.修改build.gradle
引入ReplaceToken
import org.apache.tools.ant.filters.ReplaceTokens
處理資源文件時進(jìn)行加載替換
processResources {
println "==> Load configuration for $env"
def config = new ConfigSlurper(env).parse(file("config.groovy").toURI().toURL()).toProperties()
from(sourceSets.main.resources.srcDirs) {
filter(ReplaceTokens, tokens: config, beginToken : '${', endToken : '}')
}
}
默認(rèn)情況下ReplaceTokens
會將@attribute@
的值替換成目標(biāo)值,這里我們修改占位描述符為${attribute}
經(jīng)過上面的操作,在執(zhí)行打包命令時,Gradle
會加載config.groovy
文件中的配置對src/main/resources
資源目錄下的資源文件進(jìn)行替換,注意這里替換的是所有資源文件(properties/xml/txt等)中的占位符,如果只想替換properties
文件可以添加過濾限制來實現(xiàn)對部分文件內(nèi)容的替換
法1.
from(sourceSets.main.resources.srcDirs) {
filesMatching('**/*.properties') {
filter(ReplaceTokens, tokens: config, beginToken : '${', endToken : '}')
}
}
法2.
from(sourceSets.main.resources.srcDirs) {
include '**/*.properties'
filter(ReplaceTokens, tokens: config, beginToken : '${', endToken : '}')
}
完整代碼在此:
https://github.com/GradleCN/GradleSide/tree/master/12-env/02-configfile