2010-07-07 64 views
8

Tôi xấu hổ khi hỏi điều này, nhưng tôi không thể tìm ra cách để chạy chương trình scala được định nghĩa là nằm trong gói.Sự cố Scala - cách chạy chương trình có trong gói?

Ví dụ:

package foo.bar { 

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

    } 
} 

Sau khi biên dịch tập tin Hello.scala, tôi nhận được cấu trúc thư mục dự kiến ​​

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

Những điều tôi đã cố gắng:

[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 

tôi thấy rất nhiều ví dụ trực tuyến giải thích cách đóng gói tệp của bạn. Nhưng tôi không thấy bất cứ điều gì cho thấy làm thế nào để chạy các tập tin từ dòng lệnh.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

16
scala foo.bar.Hello 
+0

Cảm ơn bạn đã phản hồi ngay lập tức. Nhiều nghĩa vụ. Tôi sẽ chấp nhận câu trả lời khi bộ đếm thời gian cooldown kết thúc. – I82Much

4

Bạn cũng có thể cần "-cp", nếu thư mục hiện tại không có trong CLASSPATH của bạn.

3

Chỉ muốn thêm một chút làm rõ cho những người mới thực sự ở đây khi tôi gặp phải sự cố tương tự khi cố gắng bắt đầu lập trình Lập trình tại Scala. (Tôi đã không thực sự quan tâm theo dõi cùng với tất cả các ví dụ trong thông dịch viên.) Khi bạn biên dịch tệp trong gói *.scala trong gói, nó sẽ đặt đầu ra *.class tệp mà bạn cần chạy trong thư mục con có cùng tên với gói .

Ví dụ, nếu bạn đang làm việc trong gói chapter2 và muốn chạy file Scala tại c:\scalaprojects\src\chapter2\HelloWorld.scala, sau đó từ dòng lệnh chạy:

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

Tiếp theo

c:\scalaprojects\src\chapter2>scala chapter2.HelloWorld 
Các vấn đề liên quan