如何创建 Ktor 嵌入式服务器的 .jar(创建可执行文件)
How to create .jar (Create Executable) of the Ktor embedded Server
我对 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,以便我可以将它分发给用户?
您需要做的是将以下代码添加到 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 <jar_name>.jar
.
或 运行 它使用 javaw -jar <jar_name>.jar
而不是 java (如果 JAVA_HOME 定义不正确,您可能需要确保它在路径上)。这将 运行 它没有任何控制台。
P.S。您还可以使用 application
插件或 shadowJar
.
我对 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,以便我可以将它分发给用户?
您需要做的是将以下代码添加到 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 <jar_name>.jar
.
或 运行 它使用 javaw -jar <jar_name>.jar
而不是 java (如果 JAVA_HOME 定义不正确,您可能需要确保它在路径上)。这将 运行 它没有任何控制台。
P.S。您还可以使用 application
插件或 shadowJar
.