IntelliJ 在新的 Ktor 项目中缺少对 slf4j 的引用

Posted

技术标签:

【中文标题】IntelliJ 在新的 Ktor 项目中缺少对 slf4j 的引用【英文标题】:IntelliJ missing reference to slf4j in new Ktor project 【发布时间】:2020-12-24 22:04:01 【问题描述】:

我通过他们的 IntelliJ 插件启动了一个新的 Ktor 项目,一切都可以使用 Gradle 进行编译和运行。然而,在 IntelliJ 中,所有引用 slf4j 记录器的东西都出现Unresolved reference: ... 错误。

我的导入和设置日志级别是这样的(抱歉我的声誉不够高,无法发布图片):

项目是用以下依赖生成的

// gradle.properties
ktor_version=1.4.0
logback_version=1.2.1

// build.gradle.kts
dependencies 
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version")
    implementation("io.ktor:ktor-server-netty:$ktor_version")
    implementation("ch.qos.logback:logback-classic:$logback_version")
    implementation("io.ktor:ktor-server-core:$ktor_version")
    implementation("io.ktor:ktor-auth:$ktor_version")
    implementation("io.ktor:ktor-auth-jwt:$ktor_version")
    implementation("io.ktor:ktor-jackson:$ktor_version")
    testImplementation("io.ktor:ktor-server-tests:$ktor_version")

我尝试将 org.slf4j:slf4j-nop:1.7.30 添加到我的依赖项中,但没有任何运气。

所以我的问题是,有没有人以前见过这个错误并且知道我是否可以更改依赖项或设置?即使编译和运行良好,也没有任何代码完成和错误散布在 IDE 周围,这很烦人。

如果需要,使用 Ktor 插件生成的完整应用程序代码如下:

package com.example

import io.ktor.application.*
import io.ktor.response.*
import io.ktor.request.*
import io.ktor.features.*
import org.slf4j.event.*
import io.ktor.routing.*
import io.ktor.http.*
import io.ktor.auth.*
import com.fasterxml.jackson.databind.*
import io.ktor.jackson.*

fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)

@Suppress("unused") // Referenced in application.conf
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) 
    install(CallLogging) 
        level = Level.INFO
        filter  call -> call.request.path().startsWith("/") 
    

    install(Authentication) 
    

    install(ContentNegotiation) 
        jackson 
            enable(SerializationFeature.INDENT_OUTPUT)
        
    

    routing 
        get("/") 
            call.respondText("HELLO WORLD!", contentType = ContentType.Text.Plain)
        

        get("/json/jackson") 
            call.respond(mapOf("hello" to "world"))
        
    

【问题讨论】:

【参考方案1】:

这是 Gradle 和 IntelliJ 的缓存问题,可能是由其他项目依赖项引起的。对于 IntelliJ,slf4j-api 库是空的。使用 rm -rf ~/.gradle/caches 删除全局 Gradle 缓存并重新下载依赖项解决了我的问题。

【讨论】:

以上是关于IntelliJ 在新的 Ktor 项目中缺少对 slf4j 的引用的主要内容,如果未能解决你的问题,请参考以下文章