2010-07-07 10 views
8

Jestem zażenowany, aby o to zapytać, ale nie mogę wymyślić, jak uruchomić program scala, który jest zdefiniowany jako pakiet.Problem Scala - jak uruchomić program, który znajduje się w pakiecie?

Przykład:

package foo.bar { 

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

    } 
} 

Po kompilacji plik Hello.scala, uzyskać oczekiwaną strukturę katalogu

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

Czego próbowałem:

[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 

widzę mnóstwo przykładów online wyjaśniających, jak spakować swoje pliki. Ale nie widzę żadnych pokazujących, jak uruchomić plik z wiersza poleceń.

Każda pomoc zostanie doceniona.

Odpowiedz

16
scala foo.bar.Hello 
+0

Dziękuję za natychmiastowa odpowiedź. Bardzo zobowiązany. Przyjmuję odpowiedź po upływie czasu regeneracji. – I82Much

4

Możesz również potrzebować "-cp.", Jeśli bieżący katalog nie znajduje się w twojej zmiennej CLASSPATH.

3

Po prostu chciałem dodać trochę wyjaśnień dla prawdziwych początkujących tutaj, ponieważ wpadłem na podobny problem, próbując zacząć od programowania w Scala. (Nie byłem tak naprawdę zainteresowany podążaniem za wszystkimi przykładami w tłumaczu). Kiedy skompilujesz plik wewnątrz paczki *.scala, umieścisz plik wyjściowy *.class, który musisz uruchomić w podkatalogu o tej samej nazwie co paczka .

Na przykład, jeśli pracujesz w pakiecie chapter2 i chcesz uruchomić plik Scala w c:\scalaprojects\src\chapter2\HelloWorld.scala, a następnie od przebiegu linii komend:

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

następnie

c:\scalaprojects\src\chapter2>scala chapter2.HelloWorld 
Powiązane problemy