Android 渐变依赖项未与依赖模块共享 上下文
我的项目中有两个模块:Android 渐变依赖项未与依赖模块共享 上下文,android,gradle,koin,Android,Gradle,Koin,我的项目中有两个模块: Java/Kotlin模块common Android/Kotlin模块app common依赖于,这是一个用于依赖项注入的Kotlin库: dependencies { implementation 'org.koin:koin-core:1.0.2' } 用法示例: class MyPresenter: KoinComponent { ... } class MyFragment { private val presenter = MyPresen
- Java/Kotlin模块
common
- Android/Kotlin模块
app
common
依赖于,这是一个用于依赖项注入的Kotlin库:
dependencies {
implementation 'org.koin:koin-core:1.0.2'
}
用法示例:
class MyPresenter: KoinComponent {
...
}
class MyFragment {
private val presenter = MyPresenter()
}
app
不依赖于Koin库,因为我不需要在Android代码中注入任何东西,所有注入都在公共代码中(演示者、拦截器等)
但是应用程序
依赖于通用
:
dependencies {
implementation project(':common')
}
用法示例:
class MyPresenter: KoinComponent {
...
}
class MyFragment {
private val presenter = MyPresenter()
}
问题 我可以编译
common
,我可以在common
中运行单元测试,但是当我尝试编译app
时,我得到以下错误:
无法解析以下类的超类型。请做
确保在类路径中具有所需的依赖项:
类xxx.common.presenter.MyPresenter,未解析的超类型:org.koin.standalone.KoinComponent
当我运行/gradlew:app:dependencies
debugCompileClasspath
+--- project :common
debugRuntimeClasspath
+--- project :common
| +--- org.koin:koin-core:1.0.2
依赖项在运行时
配置中,但在编译
配置中缺失
到目前为止,我所尝试的: 显然,我不想在
app
中声明Koin依赖项,因此我尝试了几种方法:
更改api
的依赖项:
dependencies {
api 'org.koin:koin-core:1.0.2'
}
不工作-我得到了与实现
完全相同的依赖关系树
更改项目依赖项配置:
dependencies {
implementation project(path: ':common', configuration: `compile`)
}
不工作-我不确定这一点,但我希望它能在编译
配置中获得通用
的依赖项
更改编译的依赖项:
dependencies {
compile 'org.koin:koin-core:1.0.2'
}
工作依赖项出现在debugCompileClasspath
中,我可以运行应用程序
问题
现在我很困惑:
- 由于
app
不直接使用Koin,我认为它不需要依赖项。为什么会这样?是因为MyPresenter
的静态类型是KoinComponent
- 我认为
api
与不推荐的compile
是一样的。似乎不是
- 除了使用不推荐的
编译
,还有其他方法吗
- 因为您使Koin类型出现在common的api中,所以common的使用者需要了解Koin类型。它们实际上成为API
api
配置是您应该使用并且应该工作的
- 最可能的解释是,一方的Android/Kotlin项目和另一方的Java/Kotlin项目对什么是
api
有不同的定义,如何构建或访问可消费配置apiElements
,或者
为了调试它,我建议创建一个简单的项目来重现问题,并且可以共享,因为android或kotlin插件中可能有一个bug