《Gradle user guide》翻譯
現在我們來看一個典型的多專案構建的例子。下面是工程的佈局:
樣例7.10 多專案構建 - 分層佈局
構建結構
multiproject/
api/
services/webservice/
shared/
注意:本樣例的程式碼可以在Gradle完整安裝包的samples/java/multiproject目錄下找到
這裡我們有三個工程。api工程生成用於Java客戶端訪問XML webservice服務的JAR包。webservice工程是一個web應用,用於返回XML資訊。shared工程包含了api和webservice工程共同使用的程式碼。
7.3.1 定義一個多專案構建
為了定義一個多專案構建,你需要建立一個配置檔案(settings file)。該配置檔案存放在原始碼樹的根目錄,指定了哪些專案需要包含在構建任務之中。該配置檔案必須命名位settings.gradle。在本例中,我們使用一個簡單的層次佈局。下面是相關的配置檔案:
樣例7.11 多專案構建 - settings.gradle 檔案
include "shared", "api","services:webservice", "services:shared"
更多關於配置檔案的資訊,可在第56章的多專案構建中找到。
7.3.2 常用配置
對於大多數的多專案構建來說,有一些對所有專案都常用的配置。在我們的樣例中,我們使用一種叫做配置注入的技術,將這些通用配置定義在根專案中。這裡,根專案就像一個容易,子專案在這種情況下覆蓋了該容器中的元素 - 並注入了特殊的配置。這樣,我們可以輕鬆的給所有歸檔定義清單內容和一些通用的依賴:
樣例7.12 多專案構建 - 通用配置
subprojects {
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
version = '1.0'
jar {
manifest.attributes provider: 'gradle'
} }
注意到,我們的樣例對每個子專案都應用Java外掛。這意味著我們在之前部分看過的任務和配置屬性對每個子專案都是可用的。因此,你可以通過在專案根路徑執行gradle build命令給所有的工程進行編譯,測試並打成JAR包。
7.3.3 專案間依賴
你可以在同一個構建中增加專案間的依賴,例如,一個專案的JAR包被用於另一個專案的編譯。在api專案的構建檔案中,我們將增加一個對shared工程JAR包的依賴。由於這個依賴的存在,Gradle將會確保shared工程總是在api專案之前先進行構建。
樣例7.13 多專案構建 - 專案間依賴
dependencies {
compile project(':shared')
}
關於如何關閉該功能,可參見第56.7.1章節的”關閉依賴專案的構建”部分。
7.3.4 建立一個分支
我們可以增加一個分支,用於打包給客戶端使用:
樣例7.14 多專案構建 - 分支檔案
task dist(type: Zip) {
dependsOn spiJar
from 'src/dist'
into('libs') {
from spiJar.archivePath
from configurations.runtime
}
}
artifacts {
archives dist
}