Cómo crear .jar (Create Executable) del server embedded de Ktor

Soy nuevo para Kotlin, Ktor y Gradle. Pudo crear un server incorporado como se explica en el sitio de Ktor, con el siguiente código:

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() } 

y 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" } } 

El server funciona bien en: localhost:8080

y puedo ver los files a continuación en la carpeta de out :

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

¿Cómo puedo saber crear un file ejecutable .jar de este server, para que pueda distribuirlo al usuario?

enter image description here

Lo que necesita hacer es agregar la siguiente pieza de código al file build.gradle :

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

Luego ejecuta: gradle clean jar . Una vez finalizado, navegue a: build/libs y ejecute java -jar <jar_name>.jar .

O ejecútelo usando javaw -jar <jar_name>.jar lugar de java (puede que necesite asegurarse de que esté en la ruta si el JAVA_HOME no está bien definido). Esto lo ejecutará sin ninguna console.

PS También puede usar el complemento de la application o shadowJar .

  • Manejo de la plantilla de FreeMaker con Ktor Kotlin