ClassNotFoundException:scala.Function1 $ mcLL $ sp

时间:2013-05-03 13:21:54

标签: scala

希望有人可以帮助我:)。

我正在玩Rowz,我正在忙着改用最新的Scala和Sbt(帮助我在我的环境中评估Rowz,也只是作为一种学习练习)。现在我收到以下错误,我正在努力解决:

Starting rowz (it's kinda quiet at the moment)
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Function1$mcLL$sp
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:787)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:447)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at Evaluator__92455c9cf893b1375b64dc2cae2905dd9718fe77_409351476$$anon$2$$anon$11.<init>((inline):48)
    at Evaluator__92455c9cf893b1375b64dc2cae2905dd9718fe77_409351476$$anon$2.<init>((inline):48)
    at Evaluator__92455c9cf893b1375b64dc2cae2905dd9718fe77_409351476.apply((inline):38)
    at Evaluator__92455c9cf893b1375b64dc2cae2905dd9718fe77_409351476.apply((inline):1)
    at com.twitter.util.Eval.applyProcessed(Eval.scala:197)
    at com.twitter.util.Eval.applyProcessed(Eval.scala:189)
    at com.twitter.util.Eval.apply(Eval.scala:135)
    at com.twitter.util.Eval.apply(Eval.scala:169)
    at com.twitter.rowz.Main$.main(Main.scala:16)
    at com.twitter.rowz.Main.main(Main.scala)
Caused by: java.lang.ClassNotFoundException: scala.Function1$mcLL$sp
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 22 more

有什么想法吗?

我正在使用最新的Scala(目前为2.10.1)和Sbt(目前为0.12.3)

stacktrace提到了Twitter的util-eval项目。我有最新版本。在我的Sbt文件中:     libraryDependencies + =“com.twitter”%%“util-eval”%“[6.2.4,)”

然后检索:

  • /lib_managed/jars/com.twitter/util-core_2.10/util-core_2.10-6.3.0.jar
  • /lib_managed/jars/com.twitter/util-eval_2.10/util-eval_2.10-6.3.0.jar
  • /lib_managed/jars/org.scala-lang/scala-reflect/scala-reflect-2.10.1.jar

相关文件:Eval class on Twitter's github

由于后者可能会发生变化,所以有问题的代码如下,最后一行发生错误:

  **
   * same as apply[T], but does not run preprocessors.
   */
  def applyProcessed[T](className: String, code: String, resetState: Boolean): T = {
    val cls = compiler(wrapCodeInClass(className, code), className, resetState)
    cls.getConstructor().newInstance().asInstanceOf[() => Any].apply().asInstanceOf[T]
  }

任何见解都表示赞赏。

2 个答案:

答案 0 :(得分:3)

不要使用专业化。它坏了。在我已经发布了使用特殊化(默认情况下已启用)成功编译的库之后,我反复看到了这些错误。

在完全修复专业化之前,我建议用

编译所有项目
-no-specialization

答案 1 :(得分:3)

在scala-library jar中,似乎Function1$mcLL$sp存在于2.8.2中,并且消失了2.9.x。

这是一个内部类,代表Function1apply方法专门用于long

更重要的是,这意味着您有一些代码是针对依赖项中的2.8.x编译的。

您应该浏览所有依赖项,并确保它们都以2.10.x为目标。