我有一个库,它提供了处理一些数据的实现,还有一个抽象类,它必须由使用它的程序进行扩展,以便使用数据处理的东西。
还有另一个库,它依赖于第一个库,也实现了抽象类。我想使 * 两个 * 库都可用于依赖于第二个库的程序。
示例:
libA/ (no deps)
DataProcessor.java
AbstractDataSource.java
libB/ (depends on libA)
FilesystemDataSource.java
app/ (depends on libB)
[here I want to access both DataProcessor and FilesystemDataSource]
我知道我可以将这两个库作为依赖项添加到应用程序中,但当build.gradle
文件中没有那么多项时,维护起来可能会更容易。
2条答案
按热度按时间jm2pwxwz1#
使用
api
(而不是implementation
)声明依赖项:从https://stackoverflow.com/a/44493379/68086开始:
从Gradle文档中:
出现在
api
配置中的依赖项将以可传递的方式公开给库的使用者,因此将出现在使用者的编译类路径中。另一方面,在
implementation
配置中找到的依赖项不会暴露给使用者,因此不会泄漏到使用者的编译类路径中。编译配置仍然存在,但不应使用,因为它不能提供
api
与implementation
配置所提供得保证.hs1ihplo2#
在gradle文件中添加libA作为libB的依赖项。同时在libC中添加libB作为依赖项。同时在libC的gradle配置中将transitive设置为true,以便获取可传递依赖库。
查看declaring dependencies上的Gradle官方文档和可传递依赖项。
组件的变体可以依赖于其他模块才能正常工作,即所谓的传递依赖关系。存储库上托管的模块版本可以提供元数据来声明这些传递依赖关系。默认情况下,Gradle会自动解析传递依赖关系。