2010-07-07 4 views
8

Je suis gêné de demander cela, mais je ne peux pas comprendre comment exécuter un programme de scala qui est défini pour être dans un paquet.Scala problème - comment exécuter un programme qui est dans un paquet?

Exemple:

package foo.bar { 

    object Hello { 
     def main(args:Array[String]) { 
      println("Hello") 
     } 

    } 
} 

Après avoir compilé le fichier Hello.scala, je reçois la structure du répertoire attendu

-- foo 
| `-- bar 
|  |-- Hello$.class 
|  `-- Hello.class 

choses que j'ai essayé:

[email protected] ~/Desktop/Programming/Scala master$ fsc Hello.scala 
[email protected] ~/Desktop/Programming/Scala master$ scala Hello 
no such file: Hello 
[email protected] ~/Desktop/Programming/Scala master$ scala -classpath foo/bar/ Hello 
Exception in thread "main" java.lang.NoClassDefFoundError: Hello (wrong name: foo/bar/Hello) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:676) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:317) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:375) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:242) 
    at scala.tools.nsc.ObjectRunner$.findClass(ObjectRunner.scala:29) 
    at scala.tools.nsc.ObjectRunner$.classExists(ObjectRunner.scala:42) 
    at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:149) 
    at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) 
[email protected] ~/Desktop/Programming/Scala master$ scala foo/bar/Hello 
no such file: foo/bar/Hello 
[email protected] ~/Desktop/Programming/Scala master$ scala foo/bar/Hello.class 

Je vois beaucoup d'exemples en ligne expliquant comment emballer vos fichiers. Mais je ne vois aucun qui montre comment exécuter le fichier à partir de la ligne de commande.

Toute aide serait appréciée.

Répondre

16
scala foo.bar.Hello 
+0

Nous vous remercions de réponse immédiate. Infiniment reconnaissant. J'accepterai la réponse à la fin du temps de recharge. – I82Much

4

Vous pourriez aussi avoir besoin de "-cp." Si le répertoire courant n'est pas dans votre CLASSPATH.

3

Je voulais juste ajouter une petite clarification pour les vrais débutants ici car j'ai rencontré un problème similaire en essayant de commencer Programmation en Scala. (Je n'étais pas vraiment intéressé à suivre tous les exemples dans l'interpréteur.) Lorsque vous compilez votre fichier *.scala à l'intérieur du paquet, il place le fichier de sortie *.class que vous devez exécuter dans un sous-répertoire du même nom que le paquet .

Par exemple, si vous travaillez dans le package chapter2 et que vous voulez exécuter le fichier Scala à c:\scalaprojects\src\chapter2\HelloWorld.scala, puis de la course en ligne de commande:

c:\scalaprojects\src\chapter2>scalac HelloWorld.scala 

suivie

c:\scalaprojects\src\chapter2>scala chapter2.HelloWorld 
Questions connexes