當我 「SBT運行」 下面的代碼,斯卡拉SBT:可能的錯誤?
package com.example
import java.io.ObjectInputStream
import java.io.ObjectOutputStream
import java.io.FileInputStream
import java.io.FileOutputStream
object SimpleFailure extends App {
case class MyClass(a: String, b: Int, c: Double)
def WriteObjectToFile[A](obj: A, filename: String) {
val output = new ObjectOutputStream(new FileOutputStream(filename, false))
output.writeObject(obj)
}
def ReadObjectFromFile[A](filename: String)(implicit m: Manifest[A]): A = {
val obj = new ObjectInputStream(new FileInputStream(filename)) readObject
obj match {
case a if m.erasure.isInstance(a) => a.asInstanceOf[A]
case _ => { sys.error("Type not what was expected when reading from file") }
}
}
val orig = MyClass("asdf", 42, 2.71)
val filename = "%s/delete_me.spckl".format(System.getProperty("user.home"))
WriteObjectToFile(List(orig), filename)
val loaded = try {
ReadObjectFromFile[List[MyClass]](filename)
} catch { case e => e.printStackTrace; throw e }
println(loaded(0))
}
我得到以下異常:
java.lang.ClassNotFoundException: com.example.SimpleFailure$MyClass
不過,我可以用Scala的插件在Eclipse中運行代碼的罰款。這是一個SBT錯誤嗎?有趣的是,只有在將MyClass包裝到List中時纔會出現問題(請參閱WriteObjectToFile調用中的「orig」如何包裝在List中)。如果我不包裝在列表中,一切正常。
更新:將「fork in run:= true」添加到build.sbt是一種解決方法:https://github.com/harrah/xsbt/issues/89 – emchristiansen