我在设置 3 级 gradle 多项目时遇到问题:
Level_1_Proj
│
├── Level_2_Proj_A
│ │
│ ├── Level_3_Proj_C
│ └── Level_3_Proj_D
│
└── Level_2_Proj_B
│
├── Level_3_Proj_E
└── Level_3_Proj_F
我希望能够:
- 在构建脚本中设置同级项目之间的依赖关系,例如:
dependencies {
project('Level_2_Proj_A') {
dependencies {
implementation project('Level_2_Proj_B')
}
}
}
- 还希望能够在任何级别启动 bash 命令 [$gradle build] 来构建(子树)[然后构建项目的子树]
我已经实现了从中层和底层的构建,但无法从顶层设置构建。出现错误:
A problem occurred evaluating project ‘Level_2_Proj_A’. Project with path ‘Level_3_Proj_C’ could not be found in project ‘Level_2_Proj_A’.
这可能吗?如果可以,如何配置? 谢谢
最佳答案
好吧,这就是我如何让它工作的。给定以下目录结构:
.
├── A
│ ├── C
│ │ └── build.gradle.kts
│ ├── D
│ │ └── build.gradle.kts
│ └── build.gradle.kts
├── B
│ ├── E
│ │ └── build.gradle.kts
│ ├── F
│ │ └── build.gradle.kts
│ └── build.gradle.kts
├── build.gradle.kts
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts
settings.gradle.kts
具有以下内容:
rootProject.name = "multi-module-build"
include(":A")
include(":A:C")
include(":A:D")
include(":B")
include(":B:E")
include(":B:F")
每个 build.gradle.kts
都有一个 call
任务,用于打印项目的名称路径,例如
C 项目内部:
tasks.register("call") {
println(":A:C")
}
A 项目内部:
tasks.register("call") {
dependsOn(":A:C:call")
dependsOn(":A:D:call")
println(":A")
}
tasks["build"].dependsOn(":A:call")
tasks["build"].dependsOn(":A:call")
告诉 Gradle 在构建时调用 :A:call
。 A
的 call
定义中的两个 dependsOn
调用子项目 call
任务。
B
也有类似的结构。
在根级别运行 gradle build
时,这是我得到的输出:
:A
:B
:A:C
:A:D
:B:E
:B:F
当在 A
子项目中运行 gradle build
时,我得到:
:A
:A:C
:A:D
在 :A:C
中运行它时,我没有得到任何输出,因为我没有指定 C
的 build
任务应该依赖于call
,但这很容易完成。
如果这对您不起作用,请告诉我。我在 gradle 中使用了 Kotlin DSL,但您完全可以将其更改为 Groovy 变体。
关于 Gradle 构建 : how to set up a multilevel project (3+ levels)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60834375/