通常中大型項目都會將程序分爲多個模塊來開發,除了依賴第三方庫以外,不一樣模塊之間彼此也可能存在依賴關係, Gradle 提供的配置方式,能夠很容易的完成多模塊建構。
假設如今有一個項目,區分爲核心模塊,前端及管理系統兩個 web 模塊,兩個 web 模塊除了基於 Spring MVC 框架以外,也都依賴核心模塊提供的服務。
首先創建工程資料夾 gradle_modules,而且在工程資料夾下針對三個模塊個別創建資料夾,接着執行初始化指令前端
mkdir gradle_modules mkdir gradle_modules\core mkdir gradle_modules\front_web mkdir gradle_modules\admin_web cd gradle_modules gradle init
接着修改 settings.gradle 文件,將三個模塊加入其中java
rootProject.name = 'gradle_modules' include 'core', 'front_web', 'admin_web'
寫代碼的時候一般會考慮到代碼重用的問題, Gradle 建構腳本也有類似的功能, allprojects 屬性塊能夠設定全部模塊共享的配置,例如:全部模塊都引入 idea 插件mysql
allprojects { apply plugin: 'idea' }
subprojects 屬性塊能夠設定全部子模塊共享的配置,例如:全部模塊都引入 java 插件, repositories,依賴包,依賴包版本等web
subprojects { apply plugin: 'java' repositories { jcenter() } ext { slf4jVersion = '1.7.21' springVersion = '4.3.6.RELEASE' hibernateVersion ='5.0.6.Final' } dependencies { compile( "org.slf4j:slf4j-api:${slf4jVersion}" ) } configurations { all*.exclude group: 'commons-logging' } }
還能夠在 configure 屬性塊根據模塊名稱引入特定插件spring
configure(subprojects.findAll {it.name.contains('web')}) { apply plugin: 'war' }
個別模塊所須要的配置則能夠在 project 屬性塊中設定sql
project(':core') { dependencies { compile( "org.springframework:spring-context:$springVersion", "org.springframework:spring-orm:$springVersion", "org.springframework:spring-tx:$springVersion", "org.springframework.data:spring-data-jpa:1.10.3.RELEASE", "org.hibernate:hibernate-entitymanager:$hibernateVersion", "c3p0:c3p0:0.9.1.2", "mysql:mysql-connector-java:6.0.4" ) } } project(':front_web') { dependencies { compile( project (':core'), "org.springframework:spring-web:${springVersion}" ) } } project(':admin_web') { dependencies { compile( project (':core'), "org.springframework:spring-web:${springVersion}" ) } }
以上是其中一種方式,將全部內容寫在工程資料夾下的 build.gradle 中,若是是大型項目,切分爲衆多模塊,且建構腳本的內容既多且複雜,那也能夠將每一個模塊資料夾下產生一份 build.gradle,用來處理個別模塊的建構過程,相似父類別與子類別的概念,將須要重用的屬性塊及函數等寫在上層 build.gradle 中,便可讓全部模塊的 build.gradle 調用api
以上是本文對多模塊作法的介紹,能夠由此下載 相關文件app