【问题标题】:SBT gives "class file has wrong version 51.0, should be 49.0" when compiling a mixed project?SBT 在编译混合项目时给出“类文件的版本错误 51.0,应该是 49.0”?
【发布时间】:2014-03-31 22:33:36
【问题描述】:

编辑:各种 SBT 选项

show scalacOptions
List(-deprecation, -unchecked, -encoding, UTF-8, -Yinline-warnings, -feature)

show javaOptions
List()

about
[info] This is sbt 0.13.1
[info] The current project is {file:/Users/ThomasNorth/Documents/CODE/SERVER/MonetiseAlpha/monetise-webserver/}monetise-webserver 1.0.0-SNAPSHOT
[info] The current project is built against Scala 2.10.3
[info]
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.3

尝试使用一些java源编译scala项目时出现以下错误,错误如下

[error] /Users/ThomasNorth/Documents/CODE/SERVER/MonetiseAlpha/monetise-webserver/src/main/java/com/boxbe/pub/email/EmailAddress.java:31: cannot access java.util.regex.Pattern
[error] bad class file: /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre/lib/rt.jar(java/util/regex/Pattern.class)
[error] class file has wrong version 51.0, should be 49.0
[error] Please remove or make sure it appears in the correct subdirectory of the classpath.
[error] import java.util.regex.Pattern;
[error]                        ^
[error] 1 error
[error] (compile:compile) javac returned nonzero exit code
[error] Total time: 13 s, completed 28/02/2014 3:36:38 PM

问题是,javac 和 java 都更新到了最新版本

javac-版本

javac 1.7.0_51
javac: no source files
Usage: javac <options> <source files>
where possible options include:

java-版本

java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

build.sbt

organization  := "com.monetise"

name := "webserver"

version := "1.0.0-SNAPSHOT"

scalaVersion := "2.10.3"

resolvers ++= Seq(
  Resolver.sonatypeRepo("release"),
  Resolver.sonatypeRepo("snapshots"),
  "Untyped" at "http://ivy.untyped.com/com.untyped/"
)

scalacOptions ++= Seq(
  "-deprecation",
  "-unchecked",
  "-encoding", "UTF-8",
  "-Yinline-warnings",
  "-feature"
  // "-Xcheckinit" // for debugging only, see https://github.com/paulp/scala-faq/wiki/Initialization-Order
  // "-optimise"   // this option will slow your build
)

我只安装了一个 sdk,它位于 /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

有人知道为什么会这样吗?

我什至试图把它放在我的 globals.sbt 中

javaHome := Some(file("/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"))

强制java home。 SBT 是 v 0.13.1

系统是 Mac Osx 10.9.2 (Mavericks)

【问题讨论】:

  • "class file has wrong version 51.0, should be 49.0" 这意味着您在使用 JDK 5 中的 javac,同时使用 JDK 7 中的类库。确保 JAVA_HOME 指向您的JDK 7 安装目录。
  • 试过:“export JAVA_HOME=/usr/libexec/java_home -v 1.7”在终端中,指定JAVA_HOME,但还是报同样的错误。
  • 您的构建配置文件是什么样的 - build.sbtproject/*.scala 文件?你用吗?您能否在 SBT 控制台中运行 show scalacOptionsshow javaOptionsabout 并将输出添加到问题中?
  • 检查编辑,各种选项
  • 你是如何启动 sbt 的?如果是脚本,你能发布它的内容吗?

标签: scala sbt javac


【解决方案1】:

您不能使用javaHome 设置来指定用于启动 sbt 的 java 版本,它只会指定 sbt 将查看哪个 JDK,以及它将使用哪些二进制文件叉子。不幸的是,sbt 的启动脚本不知道如何查看这个javaHome 设置并自行更新。

您使用的是什么sbt 脚本?你能添加一个which sbt 输出,并告诉我们这个脚本的内容吗? 这个文件很可能是在拉取 MacOSX 原生 JDK,而不是你安装的那个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多