Kotlin 如何从代码运行Ktor嵌入式服务器

Kotlin 如何从代码运行Ktor嵌入式服务器,kotlin,server,ktor,Kotlin,Server,Ktor,我编写了一个简单的Ktor服务器,它处理来自传入POST请求的JSON负载。现在,我想从另一个应用程序生成此服务器,并在处理请求后将其关闭 因此,我需要解决的第一个问题是:如何从其他“驱动程序”Kotlin代码生成Ktor服务器?我在网上找到的所有教程都有1-2年的历史,而且显然使用的是旧版本的Ktor,其中的主要类如下所示: fun main(args:Array){ 嵌入式服务器(Netty,8080){ 路由{ 获取(“/”){ call.respondText(“来自Kotlin后端的H

我编写了一个简单的Ktor服务器,它处理来自传入POST请求的JSON负载。现在,我想从另一个应用程序生成此服务器,并在处理请求后将其关闭

因此,我需要解决的第一个问题是:如何从其他“驱动程序”Kotlin代码生成Ktor服务器?我在网上找到的所有教程都有1-2年的历史,而且显然使用的是旧版本的Ktor,其中的主要类如下所示:

fun main(args:Array){
嵌入式服务器(Netty,8080){
路由{
获取(“/”){
call.respondText(“来自Kotlin后端的Hello”,ContentType.Text.Html)
}
}
}.start(等待=真)
}
很容易看出,只要从任何地方运行
embeddedServer(Netty,8080){…}.start(wait=true)
,就可以生成服务器。但我昨天下载了IntelliJ IDEA的Ktor插件,最近情况似乎发生了变化。这就是新的主类的外观:

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(ContentNegotiation) {
        gson {
        }
    }

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

        get("/json/gson") {
            call.respond(mapOf("hello" to "world"))
        }
    }
}
fun main(args:Array):Unit=io.ktor.server.netty.EngineMain.main(args) @Suppress(“unused”)//在application.conf中引用 @kotlin.jvm.jvm重载 fun Application.module(测试:Boolean=false){ 安装(内容协商){ 格森{ } } 路由{ 获取(“/”){ call.respondText(“HELLO WORLD!”,contentType=contentType.Text.Plain) } 获取(“/json/gson”){ call.response(mapOf(“你好”到“世界”)) } } } 现在,
Application.module(…)
函数负责设置路由和内容,而服务器的实际运行是由
io.ktor.server.netty.EngineMain.main(args)
在内部完成的。此外,端口号等属性是从
application.conf
文件中引用的,我不太确定它是如何找到该
application.conf
文件的

我已经能够使用
gradlew
运行此Ktor服务器。我还了解到,可以将其导出为可执行jar并运行(如前所述)。但我不知道如何从代码中运行它。有什么建议吗


编辑:如果我可以从驱动程序代码中设置端口号,那就太好了。

问题似乎与Android上的资源放置位置有关。我不知道这会在哪里,但你试过把它们放在那里吗?@HadiHariri实际上,我正试图从IntelliJ插件运行此服务器。@HadiHariri无论如何,我将Ktor和IntelliJ插件/依赖项合并到一个
build.gradle
文件中。然后我将
application.conf
放在
src/main/resources
文件夹中,并将
main.resources.srcDirs=['src/main/resources']
添加到
build.gradle
文件中的
sourceset
。当我运行所有程序时,我得到了错误信息
没有提供配置