2010-07-07 7 views
8

Sono imbarazzato per chiedere questo, ma non riesco a capire come eseguire un programma scala definito per essere all'interno di un pacchetto.Scala problema - come eseguire un programma che si trova in un pacchetto?

Esempio:

package foo.bar { 

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

    } 
} 

Dopo aver compilato il file Hello.scala, ottengo la struttura delle directory atteso

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

cose che ho provato:

[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 

vedo un sacco di esempi online che spiegano come impacchettare i file. Ma non vedo nessuno che mostra come eseguire il file dalla riga di comando.

Qualsiasi aiuto sarebbe apprezzato.

risposta

16
scala foo.bar.Hello 
+0

Grazie per risposta immediata. Molto obbligato. Accetterò la risposta quando il timer di raffreddamento termina. – I82Much

4

Potrebbe anche essere necessario "-cp.", Se la directory corrente non è in CLASSPATH.

3

Volevo solo aggiungere un piccolo chiarimento per i veri principianti qui mentre mi sono imbattuto in un problema simile durante il tentativo di iniziare su Programmazione in Scala. (Non ero molto interessato a seguire insieme a tutti gli esempi nell'interprete.) Quando si compila il file *.scala all'interno del pacchetto, verrà inserito il file di output *.class che è necessario eseguire in una sottodirectory con lo stesso nome del pacchetto .

Ad esempio, se si sta lavorando nella confezione chapter2 e si desidera eseguire il file Scala a c:\scalaprojects\src\chapter2\HelloWorld.scala, poi dalla linea di comando di marcia:

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

seguito da

c:\scalaprojects\src\chapter2>scala chapter2.HelloWorld 
Problemi correlati