2

誰かが私を助けてくれることを願っています:)

私は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) を使用しています。

スタックトレースは、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

問題のファイル: Twitter の github の Eval クラス

後者は変更される可能性があるため、問題のコードは次のようになり、最後の行でエラーが発生します。

  **
   * 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]
  }

任意の洞察をいただければ幸いです。

4

2 に答える 2

3

scala-library jar を grep するとFunction1$mcLL$sp、2.8.2 で存在し、2.9.x で消滅したようです。

に特化Function1したメソッドで表現した内部クラスです。applylong

さらに重要なことに、これは、依存関係に 2.8.x に対してコンパイルされたコードがあることを意味します。

すべての依存関係を調べて、それらがすべて 2.10.x をターゲットにしていることを確認する必要があります。

于 2013-05-11T08:58:19.683 に答える