编译器无法解析 io.ktor.client.features.logging 中的类

Posted

技术标签:

【中文标题】编译器无法解析 io.ktor.client.features.logging 中的类【英文标题】:Compiler cannot resolve classes in io.ktor.client.features.logging 【发布时间】:2019-10-22 08:50:41 【问题描述】:

我正在尝试在 android 应用程序中为 Ktor http 请求添加日志记录。根据docs我必须添加gradle依赖

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

只需使用这个 sn-p

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
...

我已经检查了 gradle 添加到项目中的.jar 文件,它包含所有预期的类,我可以打开它们并查看源代码,但神奇的是无法在我的应用程序中使用。经过数小时的研究,我猜这可能与 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 记录器的依赖关系?

【问题讨论】:

【参考方案1】:

对于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 添加到android 块内的app/build.gradle

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

【讨论】:

我做了正确的设置,但我没有看到任何日志。你能在这里指导我吗? @ArchieG.Quiñones 您是否有机会在没有更多信息的情况下使用HttpClient install(Logging) logger = Logger.DEFAULT level = LogLevel.ALL 初始化 HttpClient,恐怕我无法提供帮助。 是的,我做到了。我正在尝试查看 Android 中的日志,但看不到任何日志。你有我看的可行的项目吗? io.ktor:ktor-client-logging-jvm 假设您将 SL4J 作为依赖项。将其添加为依赖项,您将看到日志。 根据Logging in Ktor 文档logback 很好地抓住了@Emmanuel,它是log4j 的继任者,被提及并包含在commonMain 中,因此应该涵盖@987654333 缺少依赖项的情况@.

以上是关于编译器无法解析 io.ktor.client.features.logging 中的类的主要内容,如果未能解决你的问题,请参考以下文章

React 无法编译模块未找到:无法在listingDetail 上解析

编译器无法解析带边界的隐式类型(有时)

android 数据绑定单元测试错误无法解析数据绑定编译器选项。参数:

无法编译 ./src/App.js 找不到模块:无法解析

boost::spirit 算术公式解析器无法编译

React 编译失败。找不到模块:无法解析“Main.css”