我有一个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-库
的方式不匹配。
你是对的。您可以导入外部项目,甚至外部子项目,并在您的主项目中引用它们,但是一旦您编译外部实体,它们就无法使用预期的名称进行解析。
我发现您可以重命名主项目中的外部项目,以便它们与外部项目的名称相匹配。这样您的主项目和外部项目使用相同的名称。
将您的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"))