Gradle 多项目传递依赖
Gradle multi project transitive dependency
我有三个 gradle
项目。说 ProjectA
、ProjectB
和 ProjectC
。
ProjectC
依赖于 ProjectA
和 ProjectB
。 ProjectB
依赖于 ProjectA
.
所以 ProjectC
的 build.gradle
有以下几行:
dependencies {
implementation project(':ProjectA')
implementation project(':ProjectB')
}
而ProjectB
的build.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
我有三个 gradle
项目。说 ProjectA
、ProjectB
和 ProjectC
。
ProjectC
依赖于 ProjectA
和 ProjectB
。 ProjectB
依赖于 ProjectA
.
所以 ProjectC
的 build.gradle
有以下几行:
dependencies {
implementation project(':ProjectA')
implementation project(':ProjectB')
}
而ProjectB
的build.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