Gradle将多模块子项目中的子模块添加为另一个子项目的依赖项

sma*_*c89 4 dependency-management multiple-projects gradle

我有一个复杂而有趣的情况:

root
|___ p1
|___ p2  // depends on p3/sp1
|___ p3
|____|___sp1
|____|___sp2
Run Code Online (Sandbox Code Playgroud)

我希望这可以解释情况。

现在如何将sp1添加为p2的依赖项?注意所有项目都是基于gradle的。

到目前为止setting.gradle,我已经

rootProject.name = root
include 'p1'
include 'p2'
include 'p3'
Run Code Online (Sandbox Code Playgroud)

p2build.gradle中,我有:

dependencies {
    compile project (':p3:sp1')
}
Run Code Online (Sandbox Code Playgroud)

但是这样做仍然不能解决p2中的依赖关系。我仍然会收到有关缺少定义的错误。

我该如何解决?

顺便说一句,我将如何解决sp1可能具有的其他依赖关系。就像它依赖于sp2一样,即使它已在p3中解决,我也需要以某种方式声明它吗?

Jar*_*ows 6

假设project sp1sp2are subprojectsof project p3,如果您想执行以下操作:

dependencies {
    compile project(':p3:sp1')
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要将其更改settings.gradle为:

rootProject.name = root

include ':p1'
include ':p2'
include ':p3'    // Keep this if this folder contains a build.gradle
include ':p3:sp1'
include ':p3:sp2'
Run Code Online (Sandbox Code Playgroud)

  • Gradle 没有更正确地记录这一点,真是太遗憾了。我发现 https://guides.gradle.org/creating-multi-project-builds/ 上的教程具有误导性,并且 https://docs.gradle.org/current/userguide/multi_project_builds.html 上的官方文档缺少一些关键信息。使用 Maven,多模块构建变得微不足道(并且递归子模块也很简单);对于 Gradle 来说,绝对不是。 (4认同)

and*_*max 6

只是为那些可能正在寻找的人添加答案,在您的 settings.gradle 中,您将拥有

include ':p1',':p2',':p3:sp1',':p3:sp2'
Run Code Online (Sandbox Code Playgroud)

如果 sp1 依赖于 sp2

然后添加对 sp1 的 gradle 的依赖为

dependency {
   compile project(":p3:sp2")
}
Run Code Online (Sandbox Code Playgroud)