我有一个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
如何解决它之间存在不匹配。
答案 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"))