我的项目中有两个模块:
common
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
时,会出现此错误:
以下类的超类型无法解析。请做出来 确保您在类路径中具有必需的依赖项: 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
配置中丢失。
很显然,我不想在app
中声明Koin依赖关系,所以我尝试了以下几种方法:
更改api
的Koin依赖项:
dependencies {
api 'org.koin:koin-core:1.0.2'
}
不起作用-我得到的依赖树与implementation
完全相同。
更改项目依赖项配置:
dependencies {
implementation project(path: ':common', configuration: `compile`)
}
无法正常工作-我不确定这一点,但我希望它能在common
配置中获得compile
的依赖性。
更改compile
的Koin依赖项:
dependencies {
compile 'org.koin:koin-core:1.0.2'
}
正在工作!依存关系出现在debugCompileClasspath
中,并且我能够运行app
。
现在我很困惑:
app
并不直接使用Koin,所以我虽然不需要依赖。为什么呢是因为MyPresenter
的静态类型是KoinComponent
吗?api
与弃用的compile
相同。好像没有。compile
之外,还有其他方法吗?答案 0 :(得分:1)
ORDER BY HierachyLevel DESC
配置是您应该使用并且应该可以使用的api
是什么,消耗性配置api
的定义不同。已建立或访问或... 要对此进行调试,我建议创建一个简单的项目来重现该问题并可以共享,因为在android或kotlin插件中可能存在一个错误。