Un de mes programmes (écrit en Scala 2.8) fonctionne correctement lorsqu'il est lancé au moyen de l'EDI NetBeans. Mais quand j'essaie de l'exécuter de l'extérieur, avec "java- jar", il dit "Exception dans le fil" principal "java.lang.NoClassDefFoundError: scala/ScalaObject ...". Mettre toutes les bibliothèques, incl. Le runtime Scala dans le même répertoire que le jar à lancer n'aide pas. Si j'essaye d'exécuter le pot avec scala lui-même, il se plaint qu'il ne peut pas le décoder comme utf-8 (il attend une source de scala plutôt qu'un pot, je suppose). Alors, comment puis-je exécuter une application Scala? MISE À JOUR: Pour ceux qui viennent ici plus tard ayant la même question, je vous recommande de lire les commentaires sous la réponse de Barjak (y compris ceux les plus récents cachés), la réponse est là. VonC donne également des liens intéressants sur le sujet.Comment exécuter un fichier d'application Scala construit par NetBeans à partir d'une ligne de commande en dehors d'IDE?
Répondre
Le -jar
et -classpath
de la commande java sont mutuellement exclusifs: vous ne pouvez pas faire java -jar YourScalaProg.jar -classpath scala-library.jar
Si vous voulez exécuter votre application avec java -jar
, le chemin de classe complet doit être spécifié dans la section Class-Path
de ce pot manifeste.
Vous pouvez exécuter votre application en utilisant seulement -classpath
, comme cela: java -classpath YourScalaProg.jar:scala-library.jar your.package.MainClass
.
Dit "... Java.lang.ClassNotFoundException: Main ...". Ma classe principale (objet) est Main. – Ivan
Avez-vous utilisé le nom canonique de la classe? Le nom canonique est le nom de la classe précédée du nom du paquet: 'org.blah.Main'. En outre, en fonction de votre système d'exploitation, vous devez utiliser ':' ou ';' comme séparateur de chemin de classe. – barjak
Il semble que mon i686 Arch Linux utilise ':' (en utilisant ';', cela conduit à l'aide de java à être imprimée). en utilisant le nom de la classe principale canonique n'a pas aidé. – Ivan
Utilisez-vous scala-library.jar
comme décrit dans Adventures with Scala blog?
java -classpath scala-library.jar:. YourClass
ou:
java -classpath scala-library.jar:yourApp.jar YourClass
Où est YourClass
était votre scalac
code compilé Scala.
Vous trouverez le même scala-library.jar
utilisé dans la question SO "Creating a jar file from a Scala file" (ou dans le blog "the not so elegant way of creating an executable jar from scala code").
La classe principale (objet) de l'application est "Main" avec la fonction "principale". Le projet est "Foobar". Les lignes que vous avez données ne fonctionnent ni avec "Main", ni "main", ni "Foobar" ni "foobar" pour "YourClass". – Ivan
J'ai réussi. La solution consistait à lister toutes les librairies utilisées dans classpath. Mais ne puis-je pas simplement pointer vers un répertoire (contenant plus de bocaux que nécessaire, y compris les bocaux source et doc)? – Ivan
Voir http://stackoverflow.com/questions/809138/creating-a-jar-file-from-a-scala-file –
@ alexey-romanov, j'ai commencé à partir de là, ça n'a pas aidé. Je ne connais rien aux manifestes, j'utilise NetBeans IDE (qui utilise lui-même Ant) et je m'en sers pour construire. – Ivan