如何运行 ktor 应用程序?

Posted

技术标签:

【中文标题】如何运行 ktor 应用程序?【英文标题】:How to run ktor application? 【发布时间】:2020-05-30 16:50:05 【问题描述】:

我已经使用 Gradle 创建了一个 Ktor 应用程序,并按照 https://ktor.io/quickstart/quickstart/gradle.html#initial 上的教程进行操作。 最后说:

然后去 Run -> Edit Configurations 选择 blog.BlogAppKt 配置并将其 Main 类更改为: io.ktor.server.netty.EngineMain

现在,当我们运行新配置时,应用程序将启动 再次。

我正在搜索该选项,但找不到:

gradle 文件如下所示:

plugins 
    application
    kotlin("jvm") version "1.3.61"


group = "org.example"
version = "1.0-SNAPSHOT"


val ktor_version = "1.3.0"

repositories 
    mavenCentral()
    jcenter()


dependencies 
    implementation(kotlin("stdlib-jdk8"))
    compile("io.ktor:ktor-server-netty:$ktor_version")
    compile("io.ktor:ktor-server-core:$ktor_version")
    compile("ch.qos.logback:logback-classic:1.2.3")
    testCompile(group = "junit", name = "junit", version = "4.12")


tasks 
    compileKotlin 
        kotlinOptions.jvmTarget = "1.8"
    
    compileTestKotlin 
        kotlinOptions.jvmTarget = "1.8"
    


application 
    mainClassName = "io.ktor.server.netty.EngineMain"

更新

我尝试了以下配置:

但你可以,有一个错误消息。

我必须添加什么才能运行 Ktor 应用程序?

【问题讨论】:

你安装了 Kotlin 和 Gradle 插件吗? 是的。两者都已安装。 您使用的是哪个 JDK 版本?我可以用 OpenJDK 13 重现您的问题,但不能用 OpenJDK 8 重现您的问题。我认为您应该关注这个问题:github.com/ktorio/ktor/issues/321 【参考方案1】:

您可以手动运行 Main 函数,之后它将变为可用

【讨论】:

【参考方案2】:

如果不存在,请使用加号按钮创建一个新的。

可以选择kotlin,然后填写主类等

【讨论】:

上面写着10:22 Error running 'Run': Class 'io.ktor.server.netty.EngineMain' not found in module 'webservice'【参考方案3】:

您需要从模板应用程序创建新的运行配置,而不是从 Kotlin 模板。 (然后填写Main classUse classpath of module字段)

来源: https://ktor.io/servers/engine.html#running-the-application-from-inside-the-ide

【讨论】:

【参考方案4】:

如果您在 intellij 上安装 Ktor 插件,可能会更容易。这是我开始 Ktor 项目时通常做的第一件事。

【讨论】:

【参考方案5】:

相信你遇到过a known bug。见 cmets starting here。

当您使用 JDK 9 或更高版本时,如果您运行该配置,您将看到此堆栈跟踪:

java.lang.module.ResolutionException: Modules ktor.http.jvm and ktor.server.core export package io.ktor.http to module ktor.http.cio.jvm
    at java.base/java.lang.module.Resolver.resolveFail(Resolver.java:885)
    at java.base/java.lang.module.Resolver.failTwoSuppliers(Resolver.java:797)
    at java.base/java.lang.module.Resolver.checkExportSuppliers(Resolver.java:718)
    at java.base/java.lang.module.Resolver.finish(Resolver.java:362)
    at java.base/java.lang.module.Configuration.<init>(Configuration.java:141)
    at java.base/java.lang.module.Configuration.resolveAndBind(Configuration.java:316)
    at java.base/java.lang.module.ModuleDescriptor$1.resolveAndBind(ModuleDescriptor.java:2693)
    at java.base/jdk.internal.module.ModuleBootstrap.boot(ModuleBootstrap.java:361)
    at java.base/java.lang.ClassLoader.initializeClassLoaders(ClassLoader.java:210)
    at java.base/java.lang.Thread.initialize(Thread.java:428)
    at java.base/java.lang.Thread.<init>(Thread.java:153)

如果您切换到 JDK 8,那么您可能会在运行配置对话框中看到错误,但应用程序会运行。

【讨论】:

【参考方案6】:

Gradle 构建失败。在 ide settings>Build, Execution, Deployment>Build Tools>Gradle::Gradle JVM 中选择不同的 JVM(如果需要,请下载)。 (尝试 JDK-14 或 15)

【讨论】:

以上是关于如何运行 ktor 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

Ktor 应用程序未在使用 IntelliJ IDEA 的 Kotlin 多平台项目中运行

在 App Engine 上运行 Kotlin Ktor 应用程序时出错

Ktor-Kotlin 中的 Quartz 调度器运行在 Kubernetes 集群的所有 Pod 上

在单独的线程中初始化 Ktor 可以吗?

Ktor 后端的 CORS 问题

如何获取 ktor 服务的服务器 IP/端口?