我想讓Gradle根據我是爲桌面還是爲Android構建,在我的多項目構建中選擇不同的依賴關係。我有一個共同的子項目(一個庫),我試圖重用。但是,我無法讓Gradle正確切換依賴配置。根據平臺切換Gradle中的依賴關係
我的主要settings.gradle
簡單地包括所有的依賴:
// /settings.gradle
rootProject.name = 'myProject'
include 'androidUI'
include 'reusableLibrary'
include 'desktopUI'
現在無論androidUI
和desktopUI
指定reusableLibrary
作爲一個依賴:
// /androidUI/build.gradle and /desktopUI/build.gradle
apply plugin: 'java'
dependencies {
compile project(path: ':reusableLibrary', configuration: 'desktop')
}
reusableLibrary
本身規定了兩種配置,因爲它的依賴是不同的是否它建立在桌面或Android上:
// /reusableLibrary/build.gradle
apply plugin: 'java'
configurations {
desktop {
extendsFrom compile
}
android {
extendsFrom compile
}
}
dependencies {
// Just examples, the real list is longer.
// The point is that h2database is only included on desktop,
// and ormlite is only included on Android.
android 'com.j256.ormlite:ormlite-jdbc:5.0'
desktop 'com.h2database:h2:1.4.192'
}
This looks對我而言很好。但是,當我編譯要麼desktopUI
或androidUI
,我可以看到,雖然依賴性被包含在我想要的方式classpath中的reusableLibrary
,實際JAR 通過reusableLibrary
本身提供的是不包括在內。這當然會導致構建失敗。我懷疑我沒有正確設置reusableLibrary
;我不清楚configurations {}
塊的功能。
爲什麼reusableLibrary
中的編譯項目不包含在UI項目的類路徑中?以這種方式包含特定於平臺的依賴關係的規範方法是什麼?