语境
我的项目中有两个模块:
- Java/Kotlin 模块
common
- Android/Kotlin 模块
app
common
依赖于Koin,这是一个用于依赖注入的 Kotlin 库:
dependencies {
implementation 'org.koin:koin-core:1.0.2'
}
使用示例:
class MyPresenter: KoinComponent {
...
}
app
不依赖 Koin 库,因为我不需要在 Android 代码中注入任何东西,所有注入都在公共代码中(演示者、拦截器等)。
但app
取决于common
:
dependencies {
implementation project(':common')
}
使用示例:
class MyFragment {
private val presenter = MyPresenter()
}
问题
我可以编译common
,我可以在 中运行单元测试common
,但是当我尝试编译时app
出现此错误:
以下类的超类型无法解析。请确保您在类路径中有所需的依赖项:class xxx.common.presenter.MyPresenter,未解析的超类型:org.koin.standalone.KoinComponent
当我跑./gradlew :app:dependencies
debugCompileClasspath
+--- project :common
debugRuntimeClasspath
+--- project :common
| +--- org.koin:koin-core:1.0.2
依赖项在runtime
配置中,但在配置中缺失compile
。
到目前为止我已经尝试过:
显然我不想在其中声明 Koin 依赖项,app
所以我尝试了几件事:
更改 Koin 依赖项api
:
dependencies {
api 'org.koin:koin-core:1.0.2'
}
不工作- 我得到与implementation
.
更改项目依赖配置:
dependencies {
implementation project(path: ':common', configuration: `compile`)
}
不工作- 我不确定这个,但我希望它会获得配置中的依赖common
项compile
。
更改 Koin 依赖项compile
:
dependencies {
compile 'org.koin:koin-core:1.0.2'
}
在职的!依赖项出现在 中debugCompileClasspath
,我可以运行app
.
问题
现在我很困惑:
- 由于
app
不直接使用 Koin,我虽然不需要依赖。为什么会这样?是因为是静态类型MyPresenter
吗KoinComponent
? - 我认为
api
与 deprecated 相同compile
。似乎没有。 - 除了使用 deprecated 之外,还有其他方法
compile
吗?