编译失败:在Scala 2.10下加载Java 8的AnnotatedElement、ConcurrentMap、CharSequence时出错?

40

我正在使用以下工具:

  • Scala 2.10.4
  • Scalatra 2.2.2
  • sbt 0.13.0
  • java 1.8.0
  • casbah 2.7.2
  • scalatra-sbt 0.3.5

我经常遇到这个错误:

21:32:00.836 [qtp1687101938-55] ERROR o.fusesource.scalate.TemplateEngine - Compilation failed:
error: error while loading CharSequence, class file '/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar(java/lang/CharSequence.class)' is broken
(class java.lang.RuntimeException/bad constant pool tag 18 at byte 10)
error: error while loading ConcurrentMap, class file '/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar(java/util/concurrent/ConcurrentMap.class)' is broken
(class java.lang.RuntimeException/bad constant pool tag 18 at byte 61)
two errors found
21:38:03.616 [qtp1687101938-56] ERROR o.fusesource.scalate.TemplateEngine - Compilation failed:
error: error while loading AnnotatedElement, class file '/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar(java/lang/reflect/AnnotatedElement.class)' is broken
(class java.lang.RuntimeException/bad constant pool tag 18 at byte 76)
one error found

当我尝试简单调用MongoDB集合上的.count() 时,我遇到了这个问题。

通过谷歌搜索,看起来可能是由依赖关系引起的。问题是,我只是使用Scalatra来提供API,并且实际上不需要任何scalate内容。我已将所有引用注释掉,但仍然遇到此问题。这可能是我正在使用的库之间的依赖关系问题吗?


2
切换到Java 7并重试。这是与Java 8和使用Scala 2.9的代码有关的问题。 - Andrzej Jozwik
所有的坏类都是JDK的一部分,这似乎表明@ajozwik是正确的。 - vptheron
4
它已经修好了吗?我有一个类似的问题,但是我正在使用scala 2.11.4和Java 8 :( - MC2DX
切换到1.7版本 https://dev59.com/XGsz5IYBdhLWcg3wuKW6 - Weishi Z
9个回答

50

我们公司遇到了CharSequence的问题。这是由于Scala 2.10.x与Java 8不兼容所致。这在Scala的邮件列表中有描述。建议切换回Java 7。


12

升级到Scala 2.10.4解决了我的问题。


如何修复这个问题。那是发帖者声称正在使用的特定版本。 - Paul Childs

4

我在使用Java 1.8.0,同时配合Scala 2.10.4和sbt 0.12.4时遇到了类似的问题。但是当将sbt升级到0.13.7版本后,问题就得到了解决。


3

我发现在使用Scala 2.10.4和Java 1.8的情况下,需要Scala 2.9.2+和Java 1.7的软件出现了相同的问题。通过sudo update-alternatives --config java更改为Java 7。


0

我在Ubuntu 14.04也遇到了同样的问题,但是我通过删除scala 2.10并安装2.11来解决了它。

wget www.scala-lang.org/files/archive/scala-2.11.7.deb

 

dpkg -i scala-2.11.7.deb

现在试试。


0

这对我来说需要进行很多重新配置才能使其正常工作,以下是我的(现在)可用的 build.sbt 配置,使用 sbt 0.13.15、scala 2.10.4 和 jdk 1.8.1_131。

name := "ScalaTelemetryManagerApi"
version := "1.0"
scalaVersion := "2.10.4"
scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8")

libraryDependencies ++= {
  Seq(
    "io.spray"            %   "spray-can"     % "1.3.1",
    "io.spray"            %   "spray-routing" % "1.3.1",
    "io.spray"            %   "spray-testkit" % "1.3.1",
    "com.typesafe.akka"   %%  "akka-actor"    % "2.3.2",
    "com.typesafe.akka"   %%  "akka-testkit"  % "2.3.2",
    "org.specs2"          %%  "specs2-core"   % "3.6",
    "com.github.seratch"  %%  "awscala"       % "0.5.+",
    "org.scalaz"      %%  "scalaz-core"   % "7.2.14"
  )
}

resolvers += "Scalaz Bintray Repo" at "https://dl.bintray.com/scalaz/releases"

Revolver.settings

retrieveManaged := true

0
我通过使用以下方法解决了这个问题:
<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.10.2-RC2</version>
</dependency>

我的开发环境如下:

  • JDK 8
  • Maven
  • Scala

-1

希望Scala的稳定版本能够帮到您,建议使用2.10.x版本搭配Java 1.7.x版本以获得更好的性能。

我也是这样做的,效果很不错。


-1

我曾经遇到过同样的问题。但是当我切换到Java 7时,我的问题得到了解决。 所以现在这个配置对我来说是有效的:

sbt 0.13.8
scala 2.11.7
java 7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接