在企業通常的項目開發中,一個項目往往是多個Project組成的,Gradle也有類似Maven的多項目配置。
首先使用Idea 新建一個Model
選擇使用Gradle創建Model:
輸入Model的名稱
點擊 Finish 完成創建
就會在根項目中創建一個子項目,子項目中會包含自己的build.gradle。而setting.gradle只有根項目會有。
打開build.gradle文件,會發現根項目和子項目的build.gradle文件有很多重複的配置,能否在一處配置,所有項目中生效呢?
可以使用allprojects和subprojects實現:
在根項目的build.gradle配置如下內容,子項目就只需要配置自己需要的配置。
// 根項目及子項目都配置相關插件、屬性
allprojects {
apply plugin: 'java'
group 'org.hazulnut'
version '1.0-SNAPSHOT'
setProperty('sourceCompatibility', 1.8)
}
// 子項目都配置相關插件、屬性
subprojects {
repositories {
mavenCentral()
}
}
Gradle基於Groovy,對Groovy還沒認真學習下,藉助idea的智能提示可以很清楚的知道當前作用域的變量、屬性、函數等,既然Groovy也是基於jvm,那麼直接擼碼:
// 修改子項目的build.gradle文件名稱
rootProject.children.each {
project ->
def fileName = project.name.substring(project.name.lastIndexOf('.') + 1)+".gradle"
project.setBuildFileName(fileName)
}
注:所有項目都是使用同一種命名方式,即nuts.springboot.MODEL, 則上面運行效果是:按照MODEL.gradle作爲子項目的構建文件名稱。這段代碼要放置在setting.gradle 文件的最後,否則這段代碼之後引入的項目的構建文件名稱還是build.gradle。若是配置在build.gradle中,無論是根項目還是子項目,都會編譯錯誤:buildFileName字段是隻讀的。
修改後效果:
Github項目 https://github.com/HazelNutsWorkGroup/nuts.springboot.single ,
Gitee項目 https://gitee.com/sleeber/nuts.springboot.single
歡迎大家交流。