开发者问题收集

Gradle 复合构建找不到包含的项目依赖项

2022-01-27
2031

我正在尝试设置复合构建。当前结构为

projectA
  -build.gradle
  -settings.gradle
  -app
    -build.gradle
projectB
  -buid.gradle
  -settings.gradle
  -sdk
    -build.gradle

我需要将 projectB 用作 projectA 中的依赖项,但是 projectB 仍需要作为独立项目运行。

这是我目前拥有的

ProjectA settings.gradle 包含

includeBuild('../projectB')

ProjectA build.gradle 包含

group "com.example"

projectA:App build.gradle 包含

dependencies {
  implementation 'com.example:projectB'
}

projectB build.gradle 包含

group "com.example"

但是,当我尝试构建 projectA 时,出现错误:

Could not resolve com.example:projectB.
 Required by:
     project :app

我在这里做错了什么?我觉得它与“com.example”有关,但我不明白将包含的项目作为依赖项引用的正确方法是什么。

1个回答

您没有替换项目 A 中的依赖项。您可以参考本节中的示例 6: https://docs.gradle.org/current/userguide/composite_builds.html#included_build_declaring_substitutions

就您而言,您需要修改项目 A 的 settings.gradle 文件,使其如下所示:

includeBuild('../projectB') {
    dependencySubstitution {
          substitute module("com.example:projectB") using project(':projectB')
    }
}

这将告诉 gradle,在配置阶段,它应该将在 ../projectB 中找到的项目 :projectB 替换对 com.example:projectB 的任何依赖项。

综上所述,看起来您实际上有兴趣包含在 projectB 中定义的 sdk 模块。如果是这种情况,您可以将 using project(':projectB') 替换为 using project(':sdk')

Murph_Fish
2022-02-28