我没有
Scala的经验,所以这个问题可能是基本的.根据本教程中的“Person”示例,我正在使用
Java内的Scala类:
http://www.codecommit.com/blog/java/interop-between-java-and-scala
我创建两个源文件,一个Scala和一个Java,如下所示.
Person.scala:
class Person {
def getName() = "Daniel Spiewak"
}
Test.java:
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.getName();
}
}
我可以编译(有一个我不明白的警告),但是当我尝试运行程序时,我得到一个ClassNotFoundException.
$scalac Person.scala
$javac Test.java
./Person.class: warning: Cannot find annotation method 'bytes()' in type 'ScalaSignature': class file for scala.reflect.ScalaSignature not found
1 warning
$java Test
Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject
at java.lang.classLoader.defineClass1(Native Method)
at java.lang.classLoader.defineClass(ClassLoader.java:787)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.urlclassloader.defineClass(urlclassloader.java:447)
at java.net.urlclassloader.access$100(urlclassloader.java:71)
at java.net.urlclassloader$1.run(urlclassloader.java:361)
at java.net.urlclassloader$1.run(urlclassloader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:354)
at java.lang.classLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.classLoader.loadClass(ClassLoader.java:356)
at Test.main(Test.java:3)
Caused by: java.lang.classNotFoundException: scala.ScalaObject
at java.net.urlclassloader$1.run(urlclassloader.java:366)
at java.net.urlclassloader$1.run(urlclassloader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.urlclassloader.findClass(urlclassloader.java:354)
at java.lang.classLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.classLoader.loadClass(ClassLoader.java:356)
... 13 more
任何想法我在做错什么?
解决方法
您需要包括Scala运行时库才能使用Scala类.这是在运行时编译器警告和错误的原因.
尝试这个
java -cp .:scala-library.jar Test
(jar文件的名称可能不同,但重点是将其添加到您的类路径).