Контекст
В моем проекте два модуля:
- Модуль 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
, я получаю эту ошибку:
Не удается разрешить супертипы следующих классов.Убедитесь, что у вас есть необходимые зависимости в classpath: 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
.
Questions
Теперь я в замешательстве:
- Поскольку
app
не использует Koin напрямую, я, хотя и не нуждаюсь в зависимости.Почему это?Это потому, что статический тип MyPresenter
равен KoinComponent
? - Я думал, что
api
был таким же, как устаревший compile
.Кажется, нет. - Есть ли другой способ, кроме использования устаревшего
compile
?