Je comprends que cette question a déjà été posée, mais aucune des informations ne m’a aidé.
Voici ma situation: je ne peux pas exécuter une classe Kotlin compilée. Lorsque j’essaie de l’exécuter comme je le ferais avec une classe Java normale, j’obtiens les éléments suivants:
C:\Users\User\Desktop>java _DefaultPackage Exception in thread "main" java.lang.NoClassDefFoundError: jet/runtime/Insortingnsics at _DefaultPackage.main(Finder.kt) Caused by: java.lang.ClassNotFoundException: jet.runtime.Insortingnsics 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 l’exécution de Kotlin manquait simplement, compte tenu de cette sortie. J’ai donc essayé ce qui suit:
C:\Users\User\Desktop>java -cp kotlin-runtime.jar _DefaultPackage Error: Could not find or load main class _DefaultPackage
Ce qui m’a fait penser que je devais peut-être append le fichier de classe à mon classpath déclaré pour:
C:\Users\User\Desktop>java -cp kotlin-runtime.jar';_DefaultPackage.class _DefaultPackage Error: Could not find or load main class _DefaultPackage
Qu’est-ce que je rate?
Pour exécuter une classe Kotlin, vous exécutez en fait une classe spéciale créée au niveau du fichier qui contient votre main()
et d’autres fonctions 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 fun main(args: Array) { ... }
Ensuite, vous pouvez exécuter le programme en exécutant la classe com.my.stuff.AppKt
. Ce nom est dérivé de votre nom de fichier avec Kt
ajouté. Vous pouvez modifier le nom de cette classe dans le fichier en ajoutant cette annotation ciblée par fichier :
@file:JvmName("Foo")
Vous pouvez également placer votre main()
dans une classe avec un object compagnon et le rendre static
à l’aide de l’annotation JvmStatic
. Votre nom de classe est donc celui que vous avez choisi:
// file App.kt package com.my.stuff class MyApp { companion object { @JvmStatic fun main(args: Array) { ... } } }
Maintenant, il vous suffit d’exécuter la classe com.my.stuff.MyApp
Vous avez besoin de votre application JAR et de toutes les dépendances. Pour les JAR spécifiques à Kotlin, lorsque vous êtes en dehors de Maven / Gradle, vous avez besoin d’une dissortingbution Kotlin contenant:
kotlin-stdlib.jar
(la bibliothèque standard) kotlin-reflect.jar
uniquement si vous utilisez la reflection Kotlin kotlin-test.jar
pour les tests unitaires utilisant les classes d’assertion Kotlin Si dans Intellij (si c’est votre IDE) vous pouvez faire un clic droit sur la fonction main()
et sélectionner Exécuter, cela créera une configuration d’exécution pour vous et affichera le nom de classe complet qui sera utilisé. Vous pouvez toujours l’utiliser si vous n’êtes pas certain du nom de la classe générée.
Vous pouvez également utiliser le plug-in Gradle Application pour exécuter un processus à partir de Gradle ou pour créer un système exécutable comprenant un zip / tgz de votre JAR et toutes ses dépendances, ainsi qu’un script de démarrage. En utilisant la classe d’exemple ci-dessus, vous appendiez ceci à votre build.gradle
:
apply plugin: 'application' mainClassName = 'com.my.stuff.AppKt' // optional: add one ssortingng per argument you want as the default JVM args applicationDefaultJvmArgs = ["-Xms512m", "-Xmx1g"]
Et puis à partir de la ligne de commande, utilisez:
// run the program gradle run // debug the program gradle run --debug-jvm // create a dissortingbution (distTar, distZip, installDist, ...) gradle distTar
Si vous avez un fichier JAR KOTLIN_LIB
et que KOTLIN_LIB
à un répertoire contenant des fichiers de bibliothèque d’exécution Kotlin:
java -cp $KOTLIN_LIB/kotlin-stdlib.jar:MyApp.jar com.my.stuff.AppKt
Voir les notes ci-dessus sur les autres fichiers JAR dont vous pourriez avoir besoin. Une légère variation si vous avez un JAR exécutable (avec le manifeste pointant vers com.my.stuff.AppKt
comme classe principale):
java -cp $KOTLIN_LIB/kotlin-stdlib.jar -jar MyApp.jar
Si vous installez les outils Kotlin via Homebrew ou un autre gestionnaire de paquets. (sur la brew update ; brew install kotlin
Mac OS X brew update ; brew install kotlin
) Ensuite, c’est très simple à exécuter:
kotlin -cp MyApp.jar com.my.stuff.AppKt
Cette commande ajoute le stdlib au classpath fourni, puis exécute la classe. Vous devrez peut-être append des bibliothèques Kotlin supplémentaires, comme indiqué dans la section ci-dessus “Exécution à partir de Java”.
Ce n’est pas très courant car la plupart des gens utilisent d’autres outils de construction, mais le compilateur Kotlin peut créer un Jar exécutable qui résout ce problème pour vous (voir http://kotlinlang.org/docs/tutorials/command-line.html ) lorsqu’il regroupe le runtime et votre code ensemble. Bien que cela ne soit pas aussi courant lorsque vous utilisez des outils tels que Maven et Gradle, ou des versions IDE. Ensuite, exécutez en utilisant le Java normal:
java -jar MyApp.jar
Vous pouvez comstackr en utilisant kotlinc
comme suit:
$ kotlinc hello.kt -include-runtime -d bonjour.jar
et puis vous pouvez exécuter le fichier jar comme suit:
$ java -jar hello.jar
Essayez d’écrire:
java -cp ; _DefaultPackage
par exemple:
java -cp kotlin-runtime.jar;. _DefaultPackage
J’ai lutté avec cela pendant un moment aussi. Vous êtes proche, il vous suffit d’inclure votre jar dans le classpath et de passer le nom qualifié de votre classe “main” en tant qu’argument principal de java.