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

问题描述

我通过他们的IntelliJ插件启动了一个新的Ktor项目,并且Gradle可以正常编译和运行所有内容。但是,在IntelliJ中,引用slf4j记录器的所有内容都出现Unresolved reference: ...错误

我的导入和设置日志级别如下(很抱歉,我的声誉不够高,无法发布图像):

Import statement

References in code

项目具有以下依赖关系

// 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"))
        }
    }
}

解决方法

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