Gradle 多项目传递依赖

Gradle multi project transitive dependency

我有三个 gradle 项目。说 ProjectAProjectBProjectC

ProjectC 依赖于 ProjectAProjectBProjectB 依赖于 ProjectA.

所以 ProjectCbuild.gradle 有以下几行:

dependencies {
  implementation project(':ProjectA')
  implementation project(':ProjectB')
}

ProjectBbuild.gradle有以下内容:

dependencies {
  implementation project(':ProjectA')
}

我的问题是为什么我需要在 ProjectC 的构建文件中为 ProjectA 显式 implementation 声明?

因为我正在添加 ProjectB,所以 ProjectA 不应该被自动包含,因为 ProjectB 依赖于 ProjectA 吗?

换句话说,为什么以下对 ProjectC 不起作用?

dependencies {
  implementation project(':ProjectB')
}

我是 gradle 的新手,因此试图了解项目工作之间的依赖关系管理。


编辑:

所以我想将 ProjectB 的 build.gradle 更改为以下内容:

dependencies {
  api project(':ProjectA')
}

这样我就可以将 ProjectC 的 build.gradle 简化为:

dependencies {
  implementation project(':ProjectB')
}

但是,我收到以下错误:

A problem occurred evaluating project ':ProjectB'.
> Could not find method api() for arguments [:ProjectA] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

我是不是漏掉了什么?

因为 implementation 正是为此:它告诉 ProjectA 是 ProjectB 的代码工作(内部)所必需的,但不是其 API 的一部分(即你不希望 ProjectB 的客户依赖于它在内部使用 ProjectA 这一事实。

如果您希望项目 A 成为项目 B API 的一部分,请使用 api 配置而不是实现。

有关详细信息,请参阅 the guide

添加

plugins {
    id 'java-library'
}

build.gradle文件,这将为父项目启用api修改器

参见: https://docs.gradle.org/current/userguide/java_library_plugin.html