comment exécuter compiled class file dans Kotlin?

Jetbrains fournit la documentation mais je ne trouve pas comment exécuter le fichier de classe compilé de Kotlin.

bonjour.kt:

fun main(args : Array<String>) {
  println("Hello, world!")
}

compiler:

$ kotlinc -out dist -src hello.kt
$ ls dist
namespace.class
$ java dist/namespace
Exception in thread "main" java.lang.NoClassDefFoundError: dist/namespace (wrong name: namespace)
$ java -jar /usr/local/kotlin/lib/kotlin-runtime.jar
Failed to load Main-Class manifest attribute from
/usr/local/kotlin/lib/kotlin-runtime.jar 

comment exécuter le programme Kotlin?

21
demandé sur Jk1 2012-02-20 07:01:17

5 réponses

nous avons rencontré le même programme et blogué notre solution ici:http://blog.ocheyedan.net/blog/2012/02/19/running-kotlin-code/

fondamentalement, vous avez juste besoin d'invoquer java avec le-cp et la classe principale de 'namespace'. D'après votre question, l'invocation java ressemblerait à quelque chose comme ceci:

java -cp /usr/local/kotlin/lib/kotlin-runtime.jar:dist/namespace.class namespace
5
répondu blangel 2013-12-26 10:59:54

connaître le nom de votre classe principale

actuellement (Kotlin depuis M14 incluant jusqu'à 1.0 betas), pour exécuter une classe Kotlin vous exécutez en fait une classe spéciale qui est créée au niveau du fichier qui contient votre main() et d'autres fonctions qui sont de niveau supérieur (en dehors d'une classe ou d'une interface). Donc, si votre code est:

// file App.kt
package com.my.stuff

public fun main(args: Array<String>) {
  ...
}

alors vous pouvez exécuter le programme en lançant le com.my.stuff.AppKt classe. Ce nom est dérivé de votre nom de fichier avec Kt ajouté (versions précédentes en annexe KT mais de betas plus tard et 1.0 est Kt). Vous pouvez modifier le nom de cette classe dans le fichier en ajoutant ceci annotation des fichiers ciblés:

@file:JvmName("MyApp")  

Ou vous pouvez aussi mettre votre main() dans une classe avec un objet compagnon et le faire staticJvmStatic annotation. Par conséquent, votre nom de classe est celui que vous avez choisi:

// file App.kt
package com.my.stuff

public class MyApp {
    companion object {
        @JvmStatic public fun main(args: Array<String>) {
          ...
        }
    }
}

pour l'une ou l'autre de ces méthodes, vous n'avez Qu'à lancer la classe com.my.stuff.MyApp

de quels autres fichiers JAR ai-je besoin?

vous avez besoin de votre pot d'application et de toutes les dépendances. Pour les pots spécifiques Kotlin en dehors de Maven / Gradle, vous avez besoin d'une distribution Kotlin qui contient:

  • kotlin-runtime.jar (combinée d'exécution et stdlib)
  • kotlin-reflect.jar uniquement si l'aide de Kotlin réflexion
  • kotlin-test.jar pour les tests unitaires qui utilisent Kotlin affirmation des classes

à L'intérieur de Maven / Grad le il y a aussi un kotlin-stdlib.jar

en cours d'Exécution à partir de l'Ide

si dans Intellij (si c'est votre IDE) vous pouvez faire un clic droit sur le main() fonction et select Run, il va créer une configuration runtime pour vous et afficher le nom de classe entièrement qualifié qui sera utilisé. Vous pouvez toujours l'utiliser si vous n'êtes pas sûr du nom de la classe générée.

en cours d'Exécution à partir de Gradle

vous pouvez aussi utiliser le Grad Application plugin pour lancer un processus depuis Gradle, ou pour créer un système exécutable qui inclut un zip/tgz de votre JAR et toutes ses dépendances, et un script de démarrage. En utilisant la classe exemple ci-dessus, vous ajouteriez ceci à votre 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"] 

Et puis, à partir de l'utilisation en ligne de commande:

// run the program
gradle run

// debug the program
gradle run --debug-jvm

// create a distribution (distTar, distZip, installDist, ...)
gradle distTar

en cours d'Exécution Directement à partir de Java en ligne de Commande

si vous avez un bocal runnable, et en supposant KOTLIN_LIB pointe vers un répertoire où Kotlin exécute les fichiers de la bibliothèque résident:

java -cp $KOTLIN_LIB/kotlin-runtime.jar:MyApp.jar com.my.stuff.AppKt

voir les notes ci-dessus à propos d'autres fichiers JAR dont vous pourriez avoir besoin. Une légère variation si vous avez un bocal runnable (avec le manifeste pointé vers com.my.stuff.AppKt la classe principale):

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

exécuter en utilisant le Kotlin outil de ligne de commande

si vous installez des outils Kotlin via Homebrew ou autre gestionnaire de paquets. (sur Mac OS X brew update ; brew install kotlin) alors il est très simple d'exécuter:

kotlin -cp MyApp.jar com.my.stuff.AppKt

Cette commande ajoute de l'exécution le chemin de classe fourni, puis exécute la classe. Vous pouvez avoir besoin d'ajouter des bibliothèques Kotlin supplémentaires comme indiqué dans la section ci-dessus "exécution à partir de Java."

Création d'runnable JAR avec le Kotlin compilateur

ce n'est pas très courant puisque la plupart des gens utilisent d'autres outils de construction, mais le compilateur Kotlin peut créer un pot exécutable qui résout ce problème pour vous (voir http://kotlinlang.org/docs/tutorials/command-line.html) quand il regroupe l'exécution et votre code ainsi. Bien que ce ne soit pas aussi commun lorsque vous utilisez des outils tels que Maven et Gradle, ou IDE construit. Puis exécutez en utilisant le Java normal:

java -jar MyApp.jar
40
répondu Jayson Minard 2016-01-29 14:26:34

mise à jour: dans les versions plus récentes du plugin IDE de Kotlin, vous pouvez utiliser les actions d'exécution de contexte dans le menu pop-up des éditeurs.

si vous êtes dans L'IDE, cliquez avec le bouton droit de la souris sur l'éditeur et choisissez " Exécuter namespace" Sinon, compilez et lancez le *.classe namespace comme classe Java normale.

2
répondu Andrey Breslav 2015-12-29 13:13:53

je suis d'exécuter pot qui utilisent kotlin comme ceci

java -cp target/idea_test-1.0-SNAPSHOT.jar:lib/kotlin-runtime.jar testing.first seyfer

Bonjour seyfer de la graine!

0
répondu Oleg Abrazhaev 2014-04-27 04:33:24

docs donnez une réponse claire et concise:

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

java -jar hello.jar

koclinc est situé dans votre répertoire D'idées IntelliJ IntelliJ\plugins\Kotlin\kotlinc\bin.

Si vous utilisez Windows, utilisez kotlinc-jvm.bat

0
répondu arboreal shark 2016-12-02 23:10:15