¿Cómo distribuir una aplicación Kotlin CLI?
He creado un pequeño bot en Kotlin.
Ya está terminado y puedo ejecutarlo desde mis herramientas de desarrollo. Estoy utilizando el plugin application
para intentar la distribución, pero sigo fallando.
./gradlew run
ejecuta el bot como se espera.
Estaba buscando algo similar a ./gradlew installDist
y luego simplemente ejecutar installationDir/bin/App
(similar a las aplicaciones de Ktor) y ejecutar la aplicación. Pero simplemente se cierra exitosamente sin salida cuando debería ver mucha salida de registro.
¿Qué estoy haciendo mal?
“`
// gradle.build.kts
import org.jetbrains.kotlin.gradle.plugin.statistics.ReportStatisticsToElasticSearch.url
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.5.31"
kotlin("plugin.serialization") version "1.5.31"
application
}
group = "me.nanospicer"
version = "1.0"
repositories {
mavenCentral()
maven {
url = uri("https://jitpack.io")
}
}
tasks.withType<kotlincompile>() {
kotlinOptions.jvmTarget = "1.8"
}
application {
mainClass.set("MainKt")
}
val ktor_version="1.6.5"
dependencies {
implementation("ch.qos.logback:logback-classic:1.2.7")
implementation("io.ktor:ktor-client-core:$ktor_version")
implementation("io.ktor:ktor-client-cio:$ktor_version")
implementation("io.ktor:ktor-client-serialization:$ktor_version")
implementation("io.ktor:ktor-client-logging:$ktor_version")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.1")
}
“`
davy.ai
Basándonos en el archivo
build.gradle.kts
proporcionado, parece que falta algo de configuración para el complementoapplication
. Específicamente, necesitas especificar las propiedadesdistributionBase
ydistributionPath
para generar un archivo ZIP de distribución que puedas utilizar para ejecutar la aplicación.Aquí tienes un archivo
build.gradle.kts
actualizado que incluye estas propiedades:“ `kotlin
complementos{
kotlin(“jvm”) versión “1.5.31”
kotlin(“plugin.serialization”) versión “1.5.31”
aplicación
}
aplicación{
mainClass.set (“MainKt”)
distributionBaseName = “mi-bot”
distributionBase = project.buildDir.resolve (“distribuciones”)
distributionPath = distributionBase.absolutePath
}
repositorios{
mavenCentral()
maven {
url = uri(“https://jitpack.io”)
}
}
dependencias{
implementación(“ch.qos.logback:logback-classic:1.2.7”)
implementación(“io.ktor:ktor-client-core:1.6.5”)
implementación(“io.ktor:ktor-client-cio:1.6.5”)
implementación(“io.ktor:ktor-client-serialization:1.6.5”)
implementación(“io.ktor:ktor-client-logging:1.6.5”)
implementación(“org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.1”)
}
tareas.conTipo {
kotlinOptions.jvmTarget = “1.8”
}
tareas.register(“myBotJar”, Jar::class) {
archiveClassifier.set(“mi-bot”)
desde (sourceSets.main.output)
}
tareas.nombrado(“construir”) {
depende de(“myBotJar”)
}
“`
Con esta configuración, ejecutar
./gradlew installDist
debería generar un archivo ZIP de distribución en el directoriobuild/distributions
. Puede extraer este archivo y navegar hasta el directoriobin
para encontrar el script para ejecutar tu bot (mi-bot
).Si aún tienes problemas con la salida de registro, puedes verificar que tu configuración de registro sea correcta y que los registros no estén siendo suprimidos de alguna manera.