es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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")
}
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basándonos en el archivo build.gradle.kts proporcionado, parece que falta algo de configuración para el complemento application. Específicamente, necesitas especificar las propiedades distributionBase y distributionPath 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 directorio build/distributions. Puede extraer este archivo y navegar hasta el directorio bin 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.

Comments are closed.