文章出處

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"]
        }
    }
}

在剛才的基礎上,再加入這一段即可。

整個項目的結構圖如下:

 

示例源代碼: https://github.com/yjmyzz/gradle-profile-sample


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()