Solución:
Saber el nombre de su clase principal
Para ejecutar una clase de Kotlin, en realidad está ejecutando una clase especial que se crea en el nivel de archivo que contiene su main()
y otras funciones de nivel superior (fuera de una clase o interfaz). Entonces, si su código es:
// file App.kt
package com.my.stuff
fun main(args: Array<String>) {
...
}
Luego puede ejecutar el programa ejecutando el com.my.stuff.AppKt
clase. Este nombre se deriva de su nombre de archivo con Kt
adjunto. Puede cambiar el nombre de esta clase dentro del archivo agregando esta anotación dirigida al archivo:
@file:JvmName("Foo")
También puedes poner tu main()
en una clase con un objeto complementario y conviértalo static
utilizando el JvmStatic
anotación. Por lo tanto, el nombre de su clase es el que eligió:
// file App.kt
package com.my.stuff
class MyApp {
companion object {
@JvmStatic fun main(args: Array<String>) {
...
}
}
}
Ahora solo ejecuta la clase com.my.stuff.MyApp
¿Qué otros archivos JAR necesito?
Necesita su aplicación JAR y cualquier dependencia. Para los archivos JAR específicos de Kotlin cuando se encuentra fuera de Maven / Gradle, necesita una distribución de Kotlin que contenga:
-
kotlin-stdlib.jar
(la biblioteca estándar) -
kotlin-reflect.jar
solo si se usa la reflexión de Kotlin -
kotlin-test.jar
para pruebas unitarias que utilizan clases de aserción de Kotlin
Corriendo desde Intellij
Si está en Intellij (si es su IDE) puede hacer clic derecho en el main()
y seleccione Ejecutar, creará una configuración de tiempo de ejecución para usted y mostrará el nombre de clase completo que se utilizará. Siempre puede usar eso si no está seguro del nombre de la clase generada.
Corriendo desde Gradle
También puede usar el complemento de la aplicación Gradle para ejecutar un proceso desde Gradle o para crear un sistema ejecutable que incluya un zip / tgz de su JAR y todas sus dependencias, y un script de inicio. Usando la clase de ejemplo anterior, agregaría esto a su build.gradle
:
apply plugin: 'application'
mainClassName="com.my.stuff.AppKt"
// optional: add one string per argument you want as the default JVM args
applicationDefaultJvmArgs = ["-Xms512m", "-Xmx1g"]
Y luego, desde la línea de comandos, use:
// run the program
gradle run
// debug the program
gradle run --debug-jvm
// create a distribution (distTar, distZip, installDist, ...)
gradle distTar
Ejecutando directamente desde la línea de comandos de Java
Si tiene un JAR ejecutable y asumiendo KOTLIN_LIB
apunta a un directorio donde residen los archivos de la biblioteca en tiempo de ejecución de Kotlin:
java -cp $KOTLIN_LIB/kotlin-stdlib.jar:MyApp.jar com.my.stuff.AppKt
Consulte las notas anteriores sobre otros archivos JAR que pueda necesitar. Una ligera variación si tiene un JAR ejecutable (con el manifiesto apuntando a com.my.stuff.AppKt
como clase principal):
java -cp $KOTLIN_LIB/kotlin-stdlib.jar -jar MyApp.jar
Ejecutar con la herramienta de línea de comandos de Kotlin
Si instala las herramientas de Kotlin a través de Homebrew u otro administrador de paquetes. (en Mac OS X brew update ; brew install kotlin
) Entonces es muy simple de ejecutar:
kotlin -cp MyApp.jar com.my.stuff.AppKt
Este comando agrega stdlib a la ruta de clases proporcionada, luego ejecuta la clase. Es posible que deba agregar bibliotecas de Kotlin adicionales como se menciona en la sección anterior “Ejecución desde Java”.
Creando JAR ejecutable con el compilador Kotlin
Esto no es muy común ya que la mayoría de la gente usa otras herramientas de compilación, pero el compilador de Kotlin puede crear un Jar ejecutable que resuelve esto por usted (vea http://kotlinlang.org/docs/tutorials/command-line.html) cuando se agrupa el tiempo de ejecución y su código juntos. Aunque esto no es tan común cuando se utilizan herramientas como Maven y Gradle, o compilaciones IDE. Luego ejecute usando el Java normal:
java -jar MyApp.jar
Puedes compilar usando kotlinc
como sigue:
$ kotlinc hello.kt -include-runtime -d hello.jar
y luego puede ejecutar el archivo jar de la siguiente manera:
$ java -jar hello.jar
También luché con esto por un tiempo. Estás cerca, solo necesitas incluir tu jar en la ruta de clases y pasar el nombre calificado de tu clase “principal” como argumento principal a java.