您可以在支援 Gradle 的 IDE中開啟此範例。

定義與使用複合建置

此範例展示了如何將 2 個通常獨立開發並使用二進制整合結合的 Gradle 建置,透過來源整合連接成一個複合建置。my-utils 多專案建置產生 2 個不同的 Java 程式庫,而 my-app 建置產生一個使用這些程式庫中函式的可執行檔。

請注意,my-app 建置沒有對 my-utils 的直接相依性。相反地,它宣告了對 my-utils 產生的程式庫的模組相依性

my-app/app/build.gradle.kts
plugins {
    id("application")
}

application {
    mainClass = "org.sample.myapp.Main"
}

dependencies {
    implementation("org.sample:number-utils:1.0")
    implementation("org.sample:string-utils:1.0")
}
my-app/app/build.gradle
plugins {
    id 'application'
}

application {
    mainClass = 'org.sample.myapp.Main'
}

dependencies {
    implementation 'org.sample:number-utils:1.0'
    implementation 'org.sample:string-utils:1.0'
}

使用命令列複合建置

當使用複合建置時,建置不需要共享儲存庫,且不需要對建置腳本進行任何變更。

  1. 變更 Number.java 的來源

  2. 執行 my-app 應用程式,包含 my-utils 建置。

cd my-app
gradle --include-build ../my-utils run

使用相依性替換,對 util 程式庫的模組相依性會被替換為對 my-utils 的專案相依性。

my-app 轉換為複合建置

可以透過使 my-app 成為包含 my-utils 的複合建置,使上述安排成為持久性的。

cd my-app
echo "includeBuild '../my-utils'" >> settings.gradle
gradle run

透過此配置,從 my-appmy-utils 的模組相依性將始終被替換為專案相依性。

雖然簡單,但此方法具有修改 my-app 建置的缺點。

使用獨立複合建置

也可以建立一個獨立的複合建置,其中包含 my-appmy-utils 建置。

settings.gradle.kts
rootProject.name = "my-composite"

includeBuild("my-app")
includeBuild("my-utils")
settings.gradle
rootProject.name = 'my-composite'

includeBuild 'my-app'
includeBuild 'my-utils'

完成後,您可以在命令列中直接參考包含的建置中的任何任務以執行。

gradle :my-app:app:run

或者,您可以在複合專案中建立委派任務,以執行任務而無需指定完整的任務路徑。

build.gradle.kts
tasks.register("run") {
    dependsOn(gradle.includedBuild("my-app").task(":app:run"))
}
build.gradle
tasks.register('run') {
    dependsOn gradle.includedBuild('my-app').task(':app:run')
}
gradle run