una objetos objeto instanciar herencia declarar crear clases clase kotlin

objetos - kotlin herencia



¿Cómo ejecutar la clase Kotlin desde la línea de comandos? (4)

Entiendo que esta pregunta se ha hecho antes, pero ninguna de la información me ha ayudado.

Aquí está mi situación: no puedo ejecutar una clase compilada de Kotlin. Cuando intento ejecutarlo como si fuera una clase java normal, obtengo lo siguiente:

C:/Users/User/Desktop>java _DefaultPackage Exception in thread "main" java.lang.NoClassDefFoundError: jet/runtime/Intrinsics at _DefaultPackage.main(Finder.kt) Caused by: java.lang.ClassNotFoundException: jet.runtime.Intrinsics at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 1 more

Esto me llevó a creer que el tiempo de ejecución de Kotlin simplemente faltaba, dada esa salida. Así que intenté lo siguiente:

C:/Users/User/Desktop>java -cp kotlin-runtime.jar _DefaultPackage Error: Could not find or load main class _DefaultPackage

Lo que me hizo pensar que tal vez necesitaba agregar el archivo de clase a mi classpath declarado, así que:

C:/Users/User/Desktop>java -cp kotlin-runtime.jar'';_DefaultPackage.class _DefaultPackage Error: Could not find or load main class _DefaultPackage

¿Qué me estoy perdiendo?


Saber el nombre de su clase principal

Para ejecutar una clase Kotlin, en realidad está ejecutando una clase especial que se crea a nivel de archivo que contiene su main() y otras funciones que son de nivel superior (fuera de una clase o interfaz). Así que si tu código es:

// file App.kt package com.my.stuff fun main(args: Array<String>) { ... }

Luego puedes ejecutar el programa ejecutando la clase com.my.stuff.AppKt . Este nombre se deriva de su nombre de archivo con Kt anexado. Puede cambiar el nombre de esta clase dentro del archivo agregando esta anotación dirigida al archivo :

@file:JvmName("Foo")

También puede colocar su main() en una clase con un objeto complementario y hacerlo static usando la anotación JvmStatic . Por lo tanto, su nombre de 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?

Necesitas tu aplicación JAR y cualquier dependencia. Para JARs 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 utiliza la reflexión de Kotlin
  • kotlin-test.jar para pruebas unitarias que usan clases de aserción de Kotlin

Corriendo desde Intellij

Si en Intellij (si es su IDE) puede hacer clic derecho en la función main() y seleccionar Ejecutar, creará una configuración de tiempo de ejecución para usted y mostrará el nombre de clase completo que se usará. 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 usar:

// run the program gradle run // debug the program gradle run --debug-jvm // create a distribution (distTar, distZip, installDist, ...) gradle distTar

Ejecutar directamente desde la línea de comandos de Java

Si tiene un JAR ejecutable, y suponiendo que 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 pequeña variación si tiene un JAR ejecutable (con el manifiesto que apunta a com.my.stuff.AppKt como la clase principal):

java -cp $KOTLIN_LIB/kotlin-stdlib.jar -jar MyApp.jar

Ejecutar utilizando la herramienta de línea de comandos 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 el stdlib al classpath proporcionado, luego ejecuta la clase. Es posible que deba agregar bibliotecas Kotlin adicionales como se menciona en la sección anterior "Ejecución desde Java".

Creación de 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 Kotlin puede crear un Jar ejecutable que resuelve esto por usted (consulte 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 usan herramientas como Maven y Gradle, o compilaciones IDE. A continuación, ejecute utilizando el Java normal:

java -jar MyApp.jar


Intenta escribir:

java -cp <path to kotlin-runtime.jar>;<path to parent dir of _DefaultPackage.class> _DefaultPackage

por ejemplo:

java -cp kotlin-runtime.jar;. _DefaultPackage


Luché con esto por un tiempo también. Estás cerca, solo necesitas incluir tu jar en el classpath y pasar el nombre calificado de tu clase "principal" como el argumento principal de java.


Puedes compilar usando kotlinc siguiente manera:

$ kotlinc hello.kt -include-runtime -d hello.jar

y luego puede ejecutar el archivo jar de la siguiente manera:

$ java -jar hello.jar