【问题标题】:How to create .jar (Create Executable) of the Ktor embedded Server如何创建 Ktor 嵌入式服务器的 .jar(创建可执行文件)
【发布时间】:2018-03-04 02:03:13
【问题描述】:

我对 Kotlin、Ktor 和 Gradle 非常陌生。能够按照 Ktor 站点中的说明创建嵌入式服务器,代码如下:

BlogApp.kt

package blog

import org.jetbrains.ktor.netty.*
import org.jetbrains.ktor.routing.*
import org.jetbrains.ktor.application.*
import org.jetbrains.ktor.features.*
import org.jetbrains.ktor.host.*
import org.jetbrains.ktor.http.*
import org.jetbrains.ktor.response.*

fun Application.module() {
    install(DefaultHeaders)
    install(CallLogging)
    install(Routing) {
        get("/") {
            call.respondText("My Example Blog  sfs 122", ContentType.Text.Html)
        }
    }
}

fun main(args: Array<String>) {
    embeddedServer(Netty, 8080, watchPaths = listOf("BlogAppKt"), module = Application::module).start()
}

build.gradle

group 'Example'
version '1.0-SNAPSHOT'

buildscript {
    ext.kotlin_version = '1.1.4-3'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'java'
apply plugin: 'kotlin'

sourceCompatibility = 1.8
ext.ktor_version = '0.4.0'

repositories {
    mavenCentral()
    maven { url  "http://dl.bintray.com/kotlin/ktor" }
    maven { url "https://dl.bintray.com/kotlin/kotlinx" }
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
    compile "org.jetbrains.ktor:ktor-core:$ktor_version"
    compile "org.jetbrains.ktor:ktor-netty:$ktor_version"
    compile "ch.qos.logback:logback-classic:1.2.1"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
kotlin {
    experimental {
        coroutines "enable"
    }
}

服务器运行良好:localhost:8080

我可以在out 文件夹中看到以下文件:

C:\Users\Home\IdeaProjects\Example\out\production\classes\blog

我如何知道创建此服务器的可执行文件 .jar,以便将其分发给用户?

【问题讨论】:

    标签: java gradle kotlin ktor


    【解决方案1】:

    您需要做的是将以下代码添加到build.gradle文件中:

    jar {
        baseName '<jar_name>'
        manifest {
            attributes 'Main-Class': 'blog.BlogAppKt'
        }
    
        from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    }
    

    然后运行:gradle clean jar。完成后导航到:build/libs 并运行java -jar &lt;jar_name&gt;.jar

    或者使用javaw -jar &lt;jar_name&gt;.jar而不是java来运行它(如果JAVA_HOME没有很好地定义,你可能需要确保它在路径上)。这将在没有任何控制台的情况下运行它。

    附:您也可以使用application 插件或shadowJar

    【讨论】:

    • 当我从 IJ 终端运行它时,我得到了这个错误:'gradle' 不是内部或外部命令、可运行程序或批处理文件。
    • 当我从 cmd 运行它时,我得到了这个: * 出了什么问题:在根项目 'blog' 中找不到任务 'clean'。
    • @HasanAYousef,您确定从正确的位置运行它并应用了 java 和 kotlin 插件吗?
    • 我的设置似乎有问题,一旦我只使用文本编辑器和命令行,使用 gradle init --type java-library 创建文件,然后创建我的文件,然后编译它们 gradle clean jar 一切都像你一样顺利描述。
    • @HasanAYousef,不知道是什么导致了这个问题,但我很高兴它现在可以工作了!
    猜你喜欢
    • 1970-01-01
    • 2019-04-06
    • 2017-09-21
    • 1970-01-01
    • 2013-04-07
    • 2023-03-06
    • 1970-01-01
    • 2018-08-16
    • 2022-01-08
    相关资源
    最近更新 更多