Gradle多模組的專案構建
阿新 • • 發佈:2019-02-18
示例程式擁有兩個模組:
core模組包含一些通用的元件,它們能夠被程式的其他模組使用。例子中,只包含一個類:MessageService類返回‘Hello World!’字串。該模組有兩個依賴:Junit 4.11與commons-lang3。
app模組包含HelloWorld類,是程式的開端,它從MessageService物件中獲取資訊,並將接收到的資訊寫入一個日誌檔案中。該模組擁有兩個依賴:它需要core模組,還使用Log4j作為日誌。
下面,我們將建立一個多專案的Gradle構建,包括兩個子專案:app 和 core。首先肯定是建立專案multiproject根目錄。
1.在根目錄下建立模組的目錄並配置build.gradle檔案
首先需要建立兩個模組對應的目錄:app、core。分別在對應的目錄建立build.gradle檔案並配置:
2.對包含在多專案構建中的專案進行配置
可以通過以下步驟,對包含在多專案構建中的專案進行配置:在根專案的根目錄下建立settings.gradle檔案,它指明瞭那些包含在多專案構建中的專案。
settings.gradle配置如下:
3.配置core模組的build.gradle
4.配置app模組的build.gradle
首先先說下,如果多專案構建擁有專案A和B,同時,專案B的編譯需要專案A,可以通過在專案B的build.gradle檔案中新增以下依賴宣告來進行依賴配置。dependencies { compile project(:A)}
故app專案的build.gradle檔案如下:
5.移除重複配置
當對多專案構建中的子專案進行配置時,在core和app專案的構建指令碼中添加了重複的配置。都使用Java外掛、都使用Maven2中央倉庫等。
可以將這項配置轉移到根專案的build.gradle檔案中,在此之前,必須先學習一下如何在根專案的build.gradle檔案中配置子專案。
如果想要在一個稱為core的子專案中新增配置,那麼就必須在根專案的build.gradle檔案中新增以下片段:
如果想要在根專案的子專案中新增通用的配置,需要將以下片段新增到根專案的build.gradle檔案中:
如果配置項是被多專案構建中的所有專案所共享的,那麼也可以在根專案的build.gradle檔案中新增以下片段:
參考:http://blog.jobbole.com/84471/
core模組包含一些通用的元件,它們能夠被程式的其他模組使用。例子中,只包含一個類:MessageService類返回‘Hello World!’字串。該模組有兩個依賴:Junit 4.11與commons-lang3。
app模組包含HelloWorld類,是程式的開端,它從MessageService物件中獲取資訊,並將接收到的資訊寫入一個日誌檔案中。該模組擁有兩個依賴:它需要core模組,還使用Log4j作為日誌。
下面,我們將建立一個多專案的Gradle構建,包括兩個子專案:app 和 core。首先肯定是建立專案multiproject根目錄。
1.在根目錄下建立模組的目錄並配置build.gradle檔案
首先需要建立兩個模組對應的目錄:app、core。分別在對應的目錄建立build.gradle檔案並配置:
apply plugin: 'java'
repositories {
mavenCentral()
}
task "mkdirs" << {
sourceSets*.java.srcDirs*.each { it.mkdirs() }
sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}
分別執行gradle mkdirs任務會自動建立好src目錄。2.對包含在多專案構建中的專案進行配置
可以通過以下步驟,對包含在多專案構建中的專案進行配置:在根專案的根目錄下建立settings.gradle檔案,它指明瞭那些包含在多專案構建中的專案。
settings.gradle配置如下:
rootProject.name = 'multiproject' include 'app','core'
3.配置core模組的build.gradle
apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'org.apache.commons:commons-lang3:3.4' testCompile group: 'junit', name: 'junit', version: '4.11' } task "mkdirs" << { sourceSets*.java.srcDirs*.each { it.mkdirs() } sourceSets*.resources.srcDirs*.each { it.mkdirs() } }
4.配置app模組的build.gradle
首先先說下,如果多專案構建擁有專案A和B,同時,專案B的編譯需要專案A,可以通過在專案B的build.gradle檔案中新增以下依賴宣告來進行依賴配置。dependencies { compile project(:A)}
故app專案的build.gradle檔案如下:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'log4j:log4j:1.2.17'
compile project(':core')
testCompile group: 'junit', name: 'junit', version: '4.11'
}
jar {
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Main-Class': 'org.zero.HelloWorld'
}
}
直接執行任務gradle build,在app目錄下build/libs/會生成app.jar的可執行的jar檔案,java –jar app.jar即可執行app程式。5.移除重複配置
當對多專案構建中的子專案進行配置時,在core和app專案的構建指令碼中添加了重複的配置。都使用Java外掛、都使用Maven2中央倉庫等。
可以將這項配置轉移到根專案的build.gradle檔案中,在此之前,必須先學習一下如何在根專案的build.gradle檔案中配置子專案。
如果想要在一個稱為core的子專案中新增配置,那麼就必須在根專案的build.gradle檔案中新增以下片段:
project(:core) {
//Add core specific configuration here
}
換句話說,如果想要將重複的配置轉移到根專案的構建指令碼中,就必須將以下配置新增到build.gradle檔案中:project(:app) {
apply plugin: java;
repositories {
mavenCentral()
}
}
project(:core) {
apply plugin: java;
repositories {
mavenCentral()
}
}
不過這種做法在實質上並沒有改變什麼,在構建指令碼中依然還存在重複配置,唯一的區別是重複配置現在轉移到了根專案的build.gradle檔案中。如果想要在根專案的子專案中新增通用的配置,需要將以下片段新增到根專案的build.gradle檔案中:
subprojects {
//Add common configuration here
}
於是在根專案的build.gradle檔案可以這樣修改:subprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
task "mkdirs" << {
sourceSets*.java.srcDirs*.each { it.mkdirs() }
sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}
}
此時app、core會擁有同subprojects內容一樣的配置。如果配置項是被多專案構建中的所有專案所共享的,那麼也可以在根專案的build.gradle檔案中新增以下片段:
allprojects {
//Add configuration here
}
參考:http://blog.jobbole.com/84471/