依赖于另一个项目
让我们探索一个理论上的多项目构建,其布局如下
.
├── 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
项目。
依赖于另一个项目生成的工件
有时,您可能希望依赖于另一个项目中特定 Task 的输出,而不是整个项目。 但是,不鼓励显式声明从一个项目到另一个项目的 Task 依赖,因为它会在 Task 之间引入不必要的耦合。
对依赖关系进行建模的推荐方法是,一个项目中的 Task 依赖于另一个项目的输出,即生成输出并将其标记为“传出”工件。 Gradle 的依赖管理引擎允许您在项目之间共享任意工件并按需构建它们。