首页 > 解决方案 > API 设计:隐藏传递 API

问题描述

我正在构建一组具有固定 API 的 Android 模块,该 API 依赖于其他内部模块。Gradle 在这里引入了一个不错的(构建时)功能,将这些内部模块的依赖项分为两类:

Gradle 主要使用它来加速构建,因为如果某些模块的实现依赖发生了变化,它的 API 保持不变,因此依赖的模块不需要重新编译。这篇博文很好地总结了它

现在,当我发布我的模块时,显然implementationapi依赖项都成为常规的 Maven 依赖项,因为即使是内部模块也会将内部 API 传递到仅实现外部 API 的代码。

我知道可能没有办法正确处理这个问题,我猜随着时间的推移,人们开发了不同的解决方法来应对这种情况,例如创建包含内部依赖项的“胖”库,但通过包可见性或隐藏它们之类的,但这不是我可以走的路 - 因为我的模块实际上是模块,因为它们可以而且应该单独使用(并最终相互结合),我无法处理创建胖库的复杂性“模块A+模块B”,“模块A+模块C”,同样如此。

那么,其他人如何解决这个问题呢?其他可用的解决方法是什么?我感觉缺少一个跨模块组可见性修饰符,它告诉实现代码“你只能在同一个 Maven 组中使用这个类,即使它是公共的”。

想法?

标签: javamoduleapi-design

解决方案


推荐阅读