希望有人可以解释为什么当将特定模块声明为runtimeOnly
而不是将其声明为implementation
时,每个模块的数据绑定(bind)似乎不起作用(返回null)。
,例如
假设我有一些要包括或排除的功能模块(类似于动态功能模块),但由于其他原因(我不打算讨论)而现在不使用该功能模块,这更多是一个实验。因此,我们的想法是将多个组件从主应用程序中分离出来,这些组件仅在运行时才可用,换句话说,应用程序与任何附加功能之间几乎没有耦合,并且在我将数据绑定(bind)添加到混合中之前,这种方法可以正常工作,使用*Binding cannot be null
崩溃。
我使此设置起作用的唯一方法是从runtimeOnly
切换回implementation
,到目前为止,据我所知runtimeOnly
和impelentation
之间的区别在gradle website上:
所以我的问题是为什么会发生这种情况,在模块中启用数据绑定(bind)是否需要使用implementation
配置模块?也许我做错了所有事情,并且误解了runtimeOnly
的目的。
最佳答案
对于runtimeOnly,您需要两个依赖关系,一个依赖关系将帮助您在编译时访问代码,另一个依赖关系将在运行时替换/使用。
运行时示例:
SLF4J是runtimeOnly的最佳示例之一,在这里我们将使用slf4j-api作为实现配置和slf4j-api的实现(例如slf4j-log4j12或logback-classic等)作为runtimeOnly配置。
我创建了一个 post ,并使用对每个人都有深入的了解Working Example: source code
https://medium.com/@gauraw.negi/how-gradle-dependency-configurations-work-underhood-e934906752e5