Gradle 渐变-递归地包含外部项目及其子项目

Gradle 渐变-递归地包含外部项目及其子项目,gradle,Gradle,我有一个gradle项目,其中有许多子模块名为共享库 我有一个名为服务的项目,它依赖于共享库的一个模块。e、 例如,它取决于:共享库:module1。通常,我从maven那里得到这种依赖性 现在我想修改共享库,并使用依赖项目测试我的更改。与其更改共享库,构建、部署到maven,然后重建服务,不如让服务直接依赖共享库gradle项目 因此,我发现您可以将gradle指向文件系统上的任意项目目录: 服务/设置。渐变 include "shared-library" project(":shared-

我有一个gradle项目,其中有许多子模块名为
共享库

我有一个名为
服务
的项目,它依赖于
共享库
的一个模块。e、 例如,它取决于
:共享库:module1
。通常,我从maven那里得到这种依赖性

现在我想修改
共享库
,并使用依赖项目测试我的更改。与其更改
共享库
,构建、部署到maven,然后重建
服务
,不如让
服务
直接依赖
共享库
gradle项目

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

服务/设置。渐变

include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")
compile(
project(":shared-library:module1"),
)
include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")
include "shared-library:module2"
include "shared-library:module1"
compile(
project(":module2")
)
compile(
project(":shared-library:module2")
)
但当我这样做时,项目并不知道
共享库的子模块。我不能这样做:

服务/构建.gradle

include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")
compile(
project(":shared-library:module1"),
)
include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")
include "shared-library:module2"
include "shared-library:module1"
compile(
project(":module2")
)
compile(
project(":shared-library:module2")
)
所以我试着直接把它们包含进去<代码>:共享库:module1
取决于
:共享库:module2
,因此我也包括该库:

服务/设置。渐变

include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")
compile(
project(":shared-library:module1"),
)
include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")
include "shared-library:module2"
include "shared-library:module1"
compile(
project(":module2")
)
compile(
project(":shared-library:module2")
)
但现在,当我尝试运行此程序时,它抱怨
:共享库:module1
无法找到名为
:module2
的项目。这是因为其依赖项配置如下:

共享库/module1/build.gradle

include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")
compile(
project(":shared-library:module1"),
)
include "shared-library"
project(":shared-library").projectDir = new File("/projects/shared-library")
include "shared-library:module2"
include "shared-library:module1"
compile(
project(":module2")
)
compile(
project(":shared-library:module2")
)
但如果我将其更改为绝对项目路径,则现在
共享库
无法自行编译:

共享库/module1/build.gradle

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

tl;dr,看来
服务
解析
共享库
子模块名称的方式与
共享库
的方式不匹配。

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

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

将您的
服务/设置更改为:

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"))

我忘了我问过这个问题!我最终自己找到了这个解决方案,但我决定在本地maven repo上安装快照更容易。但我还是会接受你的回答,因为这是目前的做法。