Scala/Serializable NoClassDefFoundError(使用Scala的RMI)

6
我一直在学习Java的RMI教程this tutorial,现在想将其翻译成Scala。我使用trait而不是interface,并注释方法以指示抛出RemoteException
我已经实现了所有内容,并按照compilation step中的说明进行操作,只是用scalac代替了javac
最后到了令人兴奋的last step,运行它,我设置了安全策略,启动了rmiregistry,但遇到了这个问题:
java.rmi.ServerError: Error occurred in server thread; nested exception is: 
    java.lang.NoClassDefFoundError: scala/Serializable

这是什么原因呢?我将命令从 java 改为 scala,但除此之外其他都一样(用户名和文件路径不同)... 为什么它找不到 scala/Serializable
可能相关的信息:
$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4) (rhel-1.49.1.11.4.el6_3-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

$ scala -version
Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL

更新:将 scala.Serializable 替换为 java.io.Serializable 后,一切都正常了。然而,这只是解决问题的一种方法,而不是真正解决问题。根据 Scala API,scala.Serializable extends java.io.Serializable,所以类路径出现了问题...

1个回答

3
Scala将代码编译为Java类,但是当您以任何方式使用标准库时,还需要在类路径中包含Scala运行时库。换句话说,在您的java调用的-cp参数中,您需要包括/path/to/scala-library.jar。

我在调用类时使用了scala而不是java,然而Josh Suereth告诉我做同样的事情,我运行了以下命令:java -cp "./:~/public_html/src/server/classes/compute.jar:/cs/mutant/adelbert_chang/scala-2.9.2/lib/scala-library.jar" -Djava.rmi.server.codebase=http://cs.ucsb.edu/~adelbert_chang/src/server/classes/compute.jar -Djava.rmi.server.hostname=blackbird.cs.ucsb.edu -Djava.security.policy=server.policy system.ComputerImpl,但是出现了相同的问题... - adelbertc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接