2

我試圖做斯卡拉元帥轉儲和裝載...ClassNotFoundException的上Marshal.load

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... 

我也試過使用完全合格的類名,但沒有運氣。我錯過了什麼?

+0

您的代碼在斯卡拉2.8.1工作得很好。 – 2011-04-24 05:04:33

+0

@Frank它不適合我 - 在Windows上。也許它出於某種原因在Windows上不起作用?如果是這樣,票可能是爲了。 – 2011-04-24 05:33:23

+0

@Daniel我在Linux上測試了它。 – 2011-04-24 05:49:08

回答

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

+0

運行SBT> = 0.10,這可能會幫助: https://github.com/harrah/xsbt/wiki/Forking – 2012-05-29 17:45:41

+0

爲SBT使用的較新版本'叉在運行:= true'在你的'build.sbt'中 – Mermoz 2015-02-21 08:38:02

相關問題