java - Gradle 多项目传递依赖

标签 java gradle gradle-dependencies

我有三个 gradle 项目。比如说 ProjectAProjectBProjectC

ProjectC 依赖于 ProjectAProjectB。而 ProjectB 依赖于 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 的事实。

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

参见the guide了解更多详情。

关于java - Gradle 多项目传递依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55389699/

相关文章:

java - 学习Java人脸识别技术

java - 有没有更有效的方法来随机化然后将 3 个数据子集均匀分布组合?

kotlin - 将 Gradle 子项目与 Kotlin 多平台一起使用

intellij-idea - 使用gradle antlr插件在Intellij中的generate-src/antlr中复制dagger2

java - 升级到 gradle 4.x 后 - 无法解决 JEE 项目的警告

java - 以面向对象的方式管理 Java 中的 Mongodb 连接

java - Spring WebClient : Passing username and password in request body to get a token

gradle - Kotlin buildscript不使用我的自定义Maven repo

gradle - 在 fat JAR 中包含源