Aki*_*inn 3 dependencies gradle
我认为我遗漏了 gradle 中依赖管理如何工作的一些要点。假设我有以下项目结构:
project
---api
------api-commons
------api-v1
------api-v2
------api-v3
Run Code Online (Sandbox Code Playgroud)
其中所有api*目录都是模块。都api-v*需要特定的依赖关系(比方说common-dependency)。
我的目标是将其导入api-commons build.gradle文件中:
dependencies {
implementation 'common-dependency'
}
Run Code Online (Sandbox Code Playgroud)
在build.gradle其他模块的文件中api-v*放置:
dependencies{
implementation project(':api:api-commons')
}
Run Code Online (Sandbox Code Playgroud)
我希望这能起作用,但事实并非如此。模块中的代码的api-v*行为就像未声明依赖项一样。事实上,如果我在单个模块中导入依赖项,代码将按预期工作。
我做的是错误的假设吗?依赖继承不是这样工作的吗?
从概念上讲,在配置中声明依赖项implementation意味着它是模块内部的(它在实现中使用,但不是公共 API 的一部分)。这样的依赖关系不会暴露给消费者的编译类路径,尽管它仍然位于运行时类路径上。
这种依赖关系建模方式的优点是,如果实现依赖关系发生更改,您无需重新编译使用项目。另一个原因是,通过封装它们,消费者不太可能开始直接依赖它们,然后在更改它们时破坏它们。
如果您想向消费者公开依赖关系,则必须将其声明为模块 API 的一部分。您可以通过应用java-library插件并使用api配置来做到这一点。
例子:
// api-commons/build.gradle
plugins {
id 'java-library'
}
dependencies {
api 'common-dependency'
}
Run Code Online (Sandbox Code Playgroud)
在Gradle 用户指南中阅读更多相关信息
| 归档时间: |
|
| 查看次数: |
7508 次 |
| 最近记录: |