相依於另一個專案
讓我們探討以下配置的理論多專案建置
.
├── api
│ ├── src
│ │ └──...
│ └── build.gradle.kts
├── services
│ └── person-service
│ ├── src
│ │ └──...
│ └── build.gradle.kts
├── shared
│ ├── src
│ │ └──...
│ └── build.gradle.kts
└── settings.gradle.kts
.
├── api
│ ├── src
│ │ └──...
│ └── build.gradle
├── services
│ └── person-service
│ ├── src
│ │ └──...
│ └── build.gradle
├── shared
│ ├── src
│ │ └──...
│ └── build.gradle
└── settings.gradle
在此範例中,有三個子專案,分別稱為 shared
、api
和 person-service
-
person-service
子專案相依於其他兩個子專案,shared
和api
。 -
api
子專案相依於shared
子專案。
我們使用 :
分隔符號來定義 專案路徑,例如 services:person-service
或 :shared
。請參閱 Settings.include(java.lang.String[]) 的 DSL 文件,以取得有關定義專案路徑的更多資訊。
settings.gradle.kts
rootProject.name = "dependencies-java"
include("api", "shared", "services:person-service")
shared/build.gradle.kts
plugins {
id("java")
}
repositories {
mavenCentral()
}
dependencies {
testImplementation("junit:junit:4.13")
}
api/build.gradle.kts
plugins {
id("java")
}
repositories {
mavenCentral()
}
dependencies {
testImplementation("junit:junit:4.13")
implementation(project(":shared"))
}
services/person-service/build.gradle.kts
plugins {
id("java")
}
repositories {
mavenCentral()
}
dependencies {
testImplementation("junit:junit:4.13")
implementation(project(":shared"))
implementation(project(":api"))
}
settings.gradle
rootProject.name = 'basic-dependencies'
include 'api', 'shared', 'services:person-service'
shared/build.gradle
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
testImplementation "junit:junit:4.13"
}
api/build.gradle
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
testImplementation "junit:junit:4.13"
implementation project(':shared')
}
services/person-service/build.gradle
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
testImplementation "junit:junit:4.13"
implementation project(':shared')
implementation project(':api')
}
專案相依關係會影響執行順序。它會導致另一個專案先建置,並將另一個專案的類別輸出新增至類別路徑。它也會將另一個專案的相依關係新增至類別路徑。
如果您執行 ./gradlew :api:compile
,會先建置 shared
專案,然後再建置 api
專案。
相依於另一個專案產生的成品
有時,您可能想相依於另一個專案中特定任務的輸出,而不是整個專案。但是,不建議明確宣告從一個專案到另一個專案的任務相依關係,因為這會導致任務之間不必要的耦合。
建議的建模相依性方式,其中一個專案中的工作會依賴於另一個專案的輸出,是產生輸出並將其標記為「傳出」成品。Gradle 的相依性管理引擎讓您可以在專案之間分享任意成品,並依需求建置它們。