У меня есть мультиплатформенный проект kotlin для Android и iOS и недавно интегрированный ktor, чтобы общая библиотека могла загружать веб-ресурсы. Это работает на iOS, но на Android я получаю эту ошибку:
java.lang.NoClassDefFoundError: Failed resolution of: Lio/ktor/client/HttpClientJvmKt
Я предполагаю, что мой конвейер сборки создает jar, который не содержит всех зависимостей, которые нужны ktor. Поэтому я пытаюсь сделать толстую банку, используя плагин gradle shadow (com.github.jengelman.gradle.plugins:shadow:2.0.4
). Вот моя задача:
task shadowJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
from kotlin.targets.android.compilations.main.output
def runtimeClasspath = kotlin.targets.android.compilations.main.runtimeDependencyFiles
configurations = [runtimeClasspath]
baseName = 'myproject-android-shadow'
exclude 'META-INF/*'
exclude '*.kotlin_metadata'
}
Баночка подскочила с 300Кб до 8,5Мб.
Результатом является новая ошибка: More than one file was found with OS independent path 'kotlinx/coroutines/CoroutineExceptionHandler.kotlin_metadata'
Вы заметите, что я пытался исключить файлы из shadowJar
, но это не работает.