Comment faire pour exécuter Kotlin classe à partir de la ligne de commande?
Je comprends cette question a été posée avant, mais aucun de ces renseignements, il m'a aidé.
Voici ma situation: je ne peux pas courir, constitué à partir des Kotlin classe. Quand j'essaie de le lancer comme je le ferais normal de la classe java-je obtenir suivantes:
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
Cela m'a amené à croire que le Kotlin d'exécution était tout simplement absent, étant donné que la production. J'ai donc essayé le suivant:
C:\Users\User\Desktop>java -cp kotlin-runtime.jar _DefaultPackage
Error: Could not find or load main class _DefaultPackage
Qui m'a fait penser que peut-être j'ai besoin d'ajouter le fichier de la classe à mes déclaré classpath donc:
C:\Users\User\Desktop>java -cp kotlin-runtime.jar';_DefaultPackage.class _DefaultPackage
Error: Could not find or load main class _DefaultPackage
Ce qui me manque?
- Obtenir des réponses plus complètes à la même question dans le Débordement de Pile à: stackoverflow.com/questions/9355690/...
- Votre réponse n'est plus approprié pour le courant de Kotlin.
- kotlinlang.org/docs/tutorials/command-line.html
Vous devez vous connecter pour publier un commentaire.
Connaître le Nom de Votre Classe Principale
Pour exécuter un Kotlin classe vous sont effectivement en cours d'exécution une classe spéciale qui est créé au niveau du fichier qui contiennent votre
main()
et d'autres fonctions qui sont de haut niveau (en dehors de la classe ou de l'interface). Donc, si votre code est:Ensuite, vous pouvez exécuter le programme en exécutant le
com.my.stuff.AppKt
classe. Ce nom est dérivé de votre nom de fichier avecKt
ajouté. Vous pouvez changer le nom de cette classe dans le fichier par l'ajout de cette fichier ciblé annotation:Vous pouvez également mettre votre
main()
dans une classe avec un compagnon de l'objet et de le rendrestatic
à l'aide de laJvmStatic
annotation. Par conséquent, votre nom de la classe est celui que vous avez choisi:Maintenant, il suffit de lancer la classe
com.my.stuff.MyApp
Ce que les autres fichiers JAR ai-je besoin?
Vous avez besoin de votre application JAR et toutes les dépendances. Pour Kotlin spécifiques Pots à l'extérieur de Maven/Gradle vous avez besoin d'un Kotlin de distribution qui contient:
kotlin-stdlib.jar
(la bibliothèque standard)kotlin-reflect.jar
seulement si l'aide de Kotlin réflexionkotlin-test.jar
pour les tests unitaires qui utilisent Kotlin affirmation des classesCours d'exécution à partir de l'Ide,
Si dans Intellij (si c'est votre IDE), vous pouvez cliquer droit sur le
main()
fonction et sélectionnez Exécuter, il va créer une configuration de 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.L'exécution de Gradle
Vous pouvez également utiliser le Gradle Application plugin pour exécuter un processus de Gradle, ou pour créer un exécutable système qui comprend un zip ou tgz de votre POT et toutes ses dépendances, et un script de démarrage. À l'aide de la classe exemple ci-dessus, vous ajoutez ceci à votre
build.gradle
:Et puis, à partir de l'utilisation en ligne de commande:
Exécute Directement à partir de Java en ligne de Commande
Si vous avez un runnable JAR, et en supposant que
KOTLIN_LIB
pointe vers un répertoire où Kotlin bibliothèque d'exécution de fichiers:Voir les notes ci-dessus sur les autres fichiers JAR que vous pourriez avoir besoin. Une légère variation si vous avez un runnable JAR (avec le manifeste de pointage à
com.my.stuff.AppKt
la classe principale):Cours d'exécution à l'aide de la Kotlin outil de ligne de commande
Si vous installez Kotlin outils via Homebrew ou un autre gestionnaire de paquets. (sur Mac OS X
brew update ; brew install kotlin
), Alors il est très simple à exécuter:Cette commande ajoute le stdlib au classpath fourni, puis exécute la classe. Vous devrez peut-être ajouter d'autres Kotlin bibliothèques comme mentionné dans la section ci-dessus "en cours d'Exécution de Java."
La création de runnable JAR avec le Kotlin compilateur
Ce n'est pas très commun comme la plupart des gens à utiliser d'autres outils de construction, mais la Kotlin compilateur pouvez créer un exécutable Jar qui résout ce problème pour vous (voir http://kotlinlang.org/docs/tutorials/command-line.html) lorsqu'il intègre le moteur d'exécution et de votre code. Bien que ce n'est pas aussi commun lors de l'utilisation d'outils comme Maven et Gradle, ou IDE construit. Puis l'exécuter à l'aide de la normale Java:
mainClassName
à utiliser avec le plugin d'application si vous ne spécifiez pas un nom de package dansApp.kt
? (Tant que vous n'avez pas à avec Kotlin.)AppKt
sans préfixe paquet, mais je ne vais pas l'ajouter à la réponse ci-dessus.public
qualificatif pour votremain
fonction de haut niveau est redondant, tout est public par défautVous pouvez compiler à l'aide de
kotlinc
comme suit:et vous pouvez alors exécuter le fichier jar comme suit:
c
,kotlinc
, pas seulementkotlin
Essayer d'écrire:
par exemple:
package foo.bar; fun main(...) {...}
vous devriez direjava -cp kotlin-runtime.jar;. foo.bar.BarPackage
J'ai du mal avec ce pour un certain temps ainsi. Vous êtes, vous avez juste besoin d'inclure votre jar dans le classpath, et de transmettre le nom complet de votre classe "main" comme le principal argument de java.