11

我没有使用 Scala 的经验,所以这个问题可能是初级的。我正在尝试在 Java 中使用 Scala 类,基于本教程中的“Person”示例:http: //www.codecommit.com/blog/java/interop-between-java-and-scala

我创建了两个源文件,一个 Scala 和一个 Java,如下所示。

Person.scala:

class Person {
  def getName() = "Daniel Spiewak"
}

测试.java:

public class Test {
  public static void main(String[] args) {
    Person p = new Person();
    p.getName();
  }
}

我可以编译(带有我不理解的警告),但是当我尝试运行该程序时会收到 ClassNotFoundException。

$ scalac Person.scala
$ javac 测试.java
./Person.class:警告:在“ScalaSignature”类型中找不到注释方法“bytes()”:找不到 scala.reflect.ScalaSignature 的类文件
1 个警告
$ java 测试
线程“主”java.lang.NoClassDefFoundError 中的异常:scala/ScalaObject
        在 java.lang.ClassLoader.defineClass1(本机方法)
        在 java.lang.ClassLoader.defineClass(ClassLoader.java:787)
        在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        在 java.net.URLClassLoader.defineClass(URLClassLoader.java:447)
        在 java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        在 java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        在 java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        在 java.security.AccessController.doPrivileged(本机方法)
        在 java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        在 java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        在 java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        在 Test.main(Test.java:3)
引起:java.lang.ClassNotFoundException:scala.ScalaObject
        在 java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        在 java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        在 java.security.AccessController.doPrivileged(本机方法)
        在 java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        在 java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        在 java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        ... 13 更多

知道我做错了什么吗?

4

2 回答 2

13

您需要包含 Scala 运行时库才能使用 Scala 类。这是编译器警告和运行时错误的原因。

试试这个

 java -cp .:scala-library.jar Test

(jar 文件的名称可能不同,但重点是将其添加到您的类路径中)。

于 2012-10-16T04:26:06.950 回答
2

你把 scala-library.jar 放在你的类路径中了吗?似乎您忘记了这一点,因此 JVM 无法为 Scala 运行时找到一些内部类。

在您的链接http://www.codecommit.com/blog/java/interop-between-java-and-scala

只需将 scala-library.jar 粘贴到您的类路径中,您的所有 Scala 类都应该在您的 Java 应用程序中随时可用。

于 2012-10-16T04:28:38.777 回答