提问者:小点点

Gradle-递归包括外部项目及其子项目


我有一个gradle项目,其中包含许多名为的子模块。

我有一个名为service的项目,它依赖于share d-库的模块之一。例如,它依赖于: share d-Library:module1。通常,我从maven获得这个依赖项。

现在我想修改share d-库并使用依赖项目测试我的更改。我想让service直接依赖于share d-库gradle项目,而不是对share d-库进行更改,构建、部署到maven,然后重建我的service

所以我发现您可以将gradle指向文件系统上的任意项目目录:

service/settings. g radle

include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")

但是当我这样做时,项目不知道share d-库的子模块。我不能这样做:

service/build. gradle

compile(
project(":shared-library:module1"),
)

所以我尝试了include直接阅读它们。: shad-Library:module1依赖于:shad-Library:module2所以我也包含了那个:

service/settings. g radle

include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")
include "shared-library:module2"
include "shared-library:module1"

但是现在当我尝试运行它时,它抱怨: shad-Library:module1无法定位名为:module2的项目。这是因为它的依赖项是这样配置的:

共享-库/模块1/build. g radle

compile(
project(":module2")
)

但是如果我将其更改为绝对项目路径,现在share d-Library无法自行编译:

共享-库/模块1/build. g radle

compile(
project(":shared-library:module2")
)

tl; dr,似乎service解析share d-库子模块名称的方式与share d-库的方式不匹配。


共1个答案

匿名用户

你是对的。您可以导入外部项目,甚至外部子项目,并在您的主项目中引用它们,但是一旦您编译外部实体,它们就无法使用预期的名称进行解析。

我发现您可以重命名主项目中的外部项目,以便它们与外部项目的名称相匹配。这样您的主项目和外部项目使用相同的名称。

将您的service/settings. gradle更改为:

include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")

include "shared-library:module2"
project('shared-library:module2').name = ':module2'

include "shared-library:module1"
project('shared-library:module1').name = ':module1'

现在在您的项目和外部项目中,始终将您的模块称为: module1:module2。在service/build.gradle中使用:

compile(project(":module1"))