文章出處
文章列表
gradle中并沒有直接類似maven中的profile支持,只能變通的用其它方法來處理,在打包不同環境的應用時,通常會遇到二類問題:
一、不同的環境依賴的jar包不同
拿web開發來說,生產環境一般會采用weblogic,jboss這類重量級的容器,通常這類web server已經內置了很多第三方的通用jar包,而開發環境,一般采用嵌入式jetty這類輕量級的容器,內置的jar包會少一些,在maven中可以用<scope>provided</scope>來處理,到了gradle中可以這么處理:
build.gradle文件參考下面的寫法:
def env = System.getProperty("env") ?: "dev" apply from: "profile-${env}.gradle"
大概意思是,根據傳入的參數env不同,加載不同的profile文件。在同級目錄下,要放二個文件(下面演示的場景為,dev環境加載的spring版本為4.1.6,而prod環境加載的spring版本為4.2.3):
profile-dev.gradle
dependencies { compile 'org.springframework:spring-core:4.1.6.RELEASE' compile 'org.springframework:spring-beans:4.1.6.RELEASE' compile 'org.springframework:spring-context:4.1.6.RELEASE' compile 'org.springframework:spring-context-support:4.1.6.RELEASE' compile 'org.springframework:spring-aop:4.1.6.RELEASE' }
profile-prod.gradle
dependencies { compile 'org.springframework:spring-core:4.2.3.RELEASE' compile 'org.springframework:spring-beans:4.2.3.RELEASE' compile 'org.springframework:spring-context:4.2.3.RELEASE' }
編譯時,gradle命令這么寫:
gradle build -Denv=prod 這樣編譯的就是prod環境
gradle build -Denv=dev 這樣編譯的就是dev環境(注:dev是默認環境,所以如果是dev環境,最后的-Denv=dev也可以省略)
二、不同的環境,配置的參數不同
思路:為每個環境建不同的目錄,把各環境的屬性文件按目錄存放,編譯時動態設置gradle的資源目錄
sourceSets { main { resources { srcDirs = ["src/main/resources", "src/main/profile/$env"] } } }
在剛才的基礎上,再加入這一段即可。
整個項目的結構圖如下:
文章列表
全站熱搜