Компилятор не может разрешить классы в io.ktor.client.features.logging - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь добавить ведение журнала для Ktor http запросов в приложении Android.Согласно документам я должен добавить зависимость gradle

implementation "io.ktor:ktor-client-logging:$ktor_version"

и просто использовать этот фрагмент

val client = HttpClient() {
    install(Logging) {
        logger = Logger.DEFAULT
        level = LogLevel.HEADERS
    }
}

Проблема в том, что компилятор "игнорирует"пакет" io.ktor.client.features.logging "добавлен в качестве зависимости.Что странно, так это то, что JsonFeature (добавленный как похожая зависимость) работает просто отлично.

install(JsonFeature) { // perfectly works
...
}

install(Logging) { // unresolved reference
...
}

Я уже проверил .jar файл, который gradle добавлен в проект, он содержит все ожидаемые классы, я могу открыть их и посмотретьисходный код, но волшебным образом просто не могу использовать в моем приложении.После нескольких часов исследований, я думаю, это может быть как-то связано с метаданными gradle, или что функция ведения журнала является мультиплатформенной, и требуется дополнительная конфигурация gradle, но, к сожалению, я не эксперт по gradle.

Я пытался добавить enableFeaturePreview("GRADLE_METADATA")до settings.gradle, но без эффекта.Даже пытался добавить «-jvm» к зависимости.

implementation "io.ktor:ktor-client-logging-jvm:$ktor_version"

С этой зависимостью Android Studio успешно нашла пакет, но не скомпилировала со следующей ошибкой

More than one file was found with OS independent path 'META-INF/ktor-http.kotlin_module'

Может кто-нибудь объяснить, как правильно настроить зависимости для Ktor logger?

1 Ответ

0 голосов
/ 06 июня 2019

Для ktor-client-logging необходимо установить зависимость для каждой платформы:

commonMain {
    dependencies {
        implementation "ch.qos.logback:logback-classic:1.2.3"
        implementation "io.ktor:ktor-client-logging:$ktor_version"
    }
}

androidMain {
    dependencies {
        implementation "io.ktor:ktor-client-logging-jvm:$ktor_version"
    }
}

iosMain {
    dependencies {
        implementation "io.ktor:ktor-client-logging-native:$ktor_version"
    }
}

для мета META-INF/ktor-http.kotlin_module добавить к app/build.gradle внутри блока android {}:

android {
    packagingOptions {
        exclude 'META-INF/common.kotlin_module'
        exclude 'META-INF/*.kotlin_module'
    }
}
...