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

时间:2015-02-27 16:42:12

标签: gradle

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

我有一个名为service的项目取决于shared-library的其中一个模块。例如,它取决于:shared-library:module1。通常,我从maven获得这种依赖。

现在我想修改shared-library并使用依赖项目测试我的更改。而不是对shared-library进行更改,构建,部署到maven,然后重建我的service,我希望service取决于shared-library gradle项目< EM>直接

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

服务/ settings.gradle

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

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

服务/的build.gradle

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

所以我直接尝试了include:shared-library:module1取决于:shared-library:module2,所以我也包括那个:

服务/ settings.gradle

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

但是现在当我尝试运行它时,它会抱怨:shared-library:module1无法找到名为:module2的项目。这是因为它的依赖关系是这样配置的:

共享库/模块1 /的build.gradle

compile(
project(":module2")
)

但是,如果我将其更改为绝对项目路径,那么现在shared-library无法自行编译:

共享库/模块1 /的build.gradle

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

tl; dr ,似乎service解析shared-library子模块名称的方式与shared-library如何解决它之间存在不匹配。

1 个答案:

答案 0 :(得分:3)

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

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

将您的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"))