首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ktor java.lang.NoClassDefFoundError: io/ktor/server/cio/CIO

Ktor java.lang.NoClassDefFoundError: io/ktor/server/cio/CIO
EN

Stack Overflow用户
提问于 2022-10-07 11:14:09
回答 1查看 89关注 0票数 0

我用ktor开发了一个简单的项目

这是我的Application.kt

代码语言:javascript
运行
复制
fun main() {

embeddedServer(
    factory = CIO, port = 8080, host = "0.0.0.0"
) {
    configDependencyInjection()
    configSerialization()
    configJwtAuthentication()
    configStatusPages()
    configRequestValidation()

    configUserRouting()


    Database.connect(
        url = "jdbc:postgresql://localhost:5432/coffeehouse",
        driver = "org.postgresql.Driver",
        user = "postgres",
        password = "74279744fz"
    )

    transaction {
        SchemaUtils.drop(Users, CoffeeHouses)
        SchemaUtils.create(Users, CoffeeHouses)
    }

}.start(wait = true)
}

这是我的build.gradle.kts

代码语言:javascript
运行
复制
val ktorVersion: String by project
val kotlinVersion: String by project
val logbackVersion: String by project
val exposedVersion: String by project
val koinVersion: String by project
val postgresVersion: String by project

plugins {
    application
    kotlin("jvm") version "1.7.20"
    id("io.ktor.plugin") version "2.1.2"
    id("org.jetbrains.kotlin.plugin.serialization") version "1.7.20"
}

group = "ir.coffee"
version = "0.0.1"
application {
    mainClass.set("ir.coffee.ApplicationKt")

    val isDevelopment: Boolean = project.ext.has("development")
    applicationDefaultJvmArgs = listOf("-Dio.ktor.development=$isDevelopment")
}

repositories {
    mavenCentral()
}
tasks.withType<Jar> {
    manifest {
        attributes["Main-class"] = application.mainClass
    }
}

dependencies {
    implementation("io.ktor:ktor-server-content-negotiation-jvm:$ktorVersion")
    implementation("io.ktor:ktor-server-core-jvm:$ktorVersion")
    implementation("io.ktor:ktor-serialization-kotlinx-json-jvm:$ktorVersion")
    implementation("io.ktor:ktor-server-cio-jvm:$ktorVersion")
    implementation("io.ktor:ktor-server-auth:$ktorVersion")
    implementation("io.ktor:ktor-server-auth-jwt:$ktorVersion")
    implementation("io.ktor:ktor-server-request-validation:$ktorVersion")
    implementation("io.ktor:ktor-server-status-pages:$ktorVersion")

    implementation("ch.qos.logback:logback-classic:$logbackVersion")

    implementation("org.jetbrains.exposed:exposed-core:$exposedVersion")
    implementation("org.jetbrains.exposed:exposed-dao:$exposedVersion")
    implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion")
    implementation("org.postgresql:postgresql:$postgresVersion")


    implementation("io.insert-koin:koin-ktor:$koinVersion")
    implementation("io.insert-koin:koin-logger-slf4j:$koinVersion")

    testImplementation("io.ktor:ktor-server-tests-jvm:$ktorVersion")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion")

}

当我运行这个项目时,它工作得很好,我可以使用./gradlew installDist命令创建一个./gradlew installDist文件。

但是,当我试图使用jar命令运行java -jar ir.coffee-0.0.1.jar文件时,我会得到以下错误:

代码语言:javascript
运行
复制
Exception in thread "main" java.lang.NoClassDefFoundError: io/ktor/server/cio/CIO
at ir.coffee.ApplicationKt.main(Application.kt:16)
at ir.coffee.ApplicationKt.main(Application.kt)
Caused by: java.lang.ClassNotFoundException: io.ktor.server.cio.CIO at         
   java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 2 more

有什么建议我该怎么解决吗?

EN

回答 1

Stack Overflow用户

发布于 2022-10-07 11:30:08

installDist任务将项目的类文件打包到没有依赖项的JAR中。因此,要解决问题,可以在执行-classpath时通过java标志指定指向依赖项的路径,也可以将所有依赖项打包到JAR (分级阴影插件)中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73986336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档