2

Scalaでマーシャルダンプとロードをしようとしています...

import scala.util.Marshal

case class Test(test: String)

val t = Test("hello")
val bytes = Marshal.dump(t)
Marshal.load[Test](bytes)

...しかし、Marshal.load への呼び出しは ClassNotFoundException をスローしています...

java.lang.ClassNotFoundException: Test
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:603)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
at java.io.ObjectInputStream.readClass(ObjectInputStream.java:1461)
at java.io.Ob...

また、完全修飾クラス名を使用しようとしましたが、うまくいきませんでした。私は何が欠けていますか?

4

1 に答える 1

3

どのバージョンの SBT を使用していますか? SBT 0.7.7 で同様の問題が発生し、ビルドに以下を追加して解決しました。

// cause the SBT "run" action to fork                                                                                                              
override def fork = Some(new ForkScalaRun() {
  override def scalaJars = Seq(buildLibraryJar.asFile, buildCompilerJar.asFile)
})

「実行」アクションをフォークさせると、クラスローダーの問題とSystem.exit呼び出しのトラップの問題が解決されるようです。

http://code.google.com/p/simple-build-tool/wiki/Forking

http://code.google.com/p/simple-build-tool/wiki/RunningProjectCode

于 2012-05-29T17:41:24.507 に答える