Gradle 多项目传递依赖关系

2022-09-04 03:28:44

我有三个项目。说 和 。gradleProjectAProjectBProjectC

ProjectC同时依赖于 和 。虽然依赖于 。ProjectAProjectBProjectBProjectA

所以 有以下几行:ProjectCbuild.gradle

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

和 's 具有以下特性:ProjectBbuild.gradle

dependencies {
  implementation project(':ProjectA')
}

我的问题是,为什么我需要为 中的 构建文件 显式声明?implementationProjectAProjectC

由于,我正在添加,不应该自动包含,因为依赖于?ProjectBProjectAProjectBProjectA

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

dependencies {
  implementation project(':ProjectB')
}

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


编辑:

所以我想把 build.gradle 改成下面:ProjectB

dependencies {
  api project(':ProjectA')
}

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

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.

我错过了什么吗?


答案 1

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

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

有关更多详细信息,请参阅指南


答案 2

plugins {
    id 'java-library'
}

到该文件,这将为父项目启用修饰符build.gradleapi

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


推荐