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?
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
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 static
JvmStatic
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éflexionkotlin-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
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.
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!
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