scala/Serializable NoClassDefFoundError (RMI w/ Scala)
Asked Answered
L

1

6

Been following this tutorial on RMI for Java, trying to translate it to Scala. Instead of interface I use trait, and I annotate methods to indicate the throwing of the RemoteException.

Got everything implemented, and got to the compilation step and followed it exactly, except instead of javac I used scalac.

Finally at the exciting last step, running it, and I setup the security policies, start the rmiregistry, go to startup my server and get hit with this:

java.rmi.ServerError: Error occurred in server thread; nested exception is: 
    java.lang.NoClassDefFoundError: scala/Serializable

What could be causing this? I changed their command from java to scala, but everything else is the same (modulo the usernames and file paths).. how is it not finding scala/Serializable?

Potentially relevant:

$ 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

UPDATE: Replaced scala.Serializable with java.io.Serializable and everything worked. However, this is a work around the problem and opposed to solving the problem. According to the Scala API, scala.Serializable extends java.io.Serializable so something is going wonky with the classpath...

Locomobile answered 3/10, 2012 at 6:35 Comment(0)
S
3

Scala compiles code down to Java classes, but when you're using the standard library in any way, you also need to include the Scala runtime library in your classpath.

In other words, you'll need /path/to/scala-library.jar in the -cp argument of your java invocation.

Sabinasabine answered 3/10, 2012 at 10:5 Comment(1)
I had used scala instead of java for the invocation of the class, however Josh Suereth told me to do the same thing, and I ran this: 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, but same problem...Locomobile

© 2022 - 2024 — McMap. All rights reserved.