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

编译失败:在Scala 2.10下从Java 8加载AnnotatedElement、ConcurrentMap、CharSequence时出错?,scala,sbt,Scala,Sbt,我正在使用以下命令: Scala 2.10.4 Scalatra 2.2.2 sbt 0.13.0 java 1.8.0 卡斯巴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

我正在使用以下命令:

  • Scala 2.10.4
  • Scalatra 2.2.2
  • sbt 0.13.0
  • java 1.8.0
  • 卡斯巴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的东西。我注释掉了所有对它的引用,但我仍然得到了这个。这可能是我正在使用的库之间的依赖性问题吗?

在我的公司,CharSequence出现了这个问题。这是因为Scala2.10.x不适用于Java8。这是用Scalas描述的。切换回Java 7。

我发现需要在Scala 2.10.4和Java 1.8上运行Scala 2.9.2+和Java 1.7的软件也存在同样的问题。通过sudo更新选项更改为Java 7——配置Java切换到Scala 2.10.4为我解决了这个问题。

我希望Scala的稳定版本能够帮助您,尝试2.10.x和Java 1.7.x版本以获得更好的性能


我的意思是,它对我同样有效。

在使用Scala 2.10.4和sbt 0.12.4的Java 1.8.0上,我也有类似的问题。但是当升级到sbt 0.13.7时,问题就解决了。

我也遇到了同样的问题。然而,通过切换到Java7,我的问题得到了解决。 因此,现在这种配置对我有效:

sbt 0.13.8
scala 2.11.7
java 7

我用以下方法解决了这个问题:

<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.10.2-RC2</version>
</dependency>

org.scala-lang
scala图书馆
2.10.2-RC2
我的环境是:

  • JDK 8
  • 马文
  • 斯卡拉

我在Ubuntu 14.04中也遇到了同样的问题,但我通过删除scala 2.10并安装2.11解决了这个问题

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


现在试试看

为了让它正常工作,我进行了大量的重新配置, 这是我(现在)正在使用的build.sbt, sbt 0.13.15和scala 2.10.4以及jdk 1.8.1131

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

更改为java 7并重试。这是java 8和使用scala 2.9的代码的问题。所有损坏的类都是JDK的一部分,这似乎表明@ajozwik是正确的。它被修复了吗?我也有一个类似的问题,但我正在使用scala 2.11.4和Java 8:(切换到1.7如何解决这个问题。这是OP声称使用的特定版本。)
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