【问题标题】:How to force SBT to use Java 8?如何强制 SBT 使用 Java 8?
【发布时间】:2019-12-16 21:04:00
【问题描述】:

如何强制 SBT 编译为 Java 8 类文件。我添加了 scalacOptions += "-target:jvm-1.8" 但它给出了以下错误消息:

[error] 'jvm-1.8' is not a valid choice for '-target'
[error] bad option: '-target:jvm-1.8'
[error] (compile:compile) Compilation failed

我使用的是 SBT 版本 0.15.5。

我知道我在将它添加到 build.sbt 时正在使用 Java 8 进行编译,但我仍然想知道为什么 scalacOptions 失败并且我不知道 scalac 会产生什么输出。

initialize := {
  val _ = initialize.value
  if (sys.props("java.specification.version") != "1.8")
    sys.error("Java 8 is required for this project.")
}

【问题讨论】:

  • 反编译我的 Play 视图类之一显示格式版本为 50 - 这不是 Java 8,所以我之前发布的答案是错误的。

标签: scala sbt


【解决方案1】:

您的 build.sbt 文件需要以下内容。

javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint")

initialize := {
  val _ = initialize.value
  val javaVersion = sys.props("java.specification.version")
  if (javaVersion != "1.8")
    sys.error("Java 1.8 is required for this project. Found " + javaVersion + " instead")
}

【讨论】:

  • 为什么需要获取initialize设置的值?万一父构建具有初始化的好习惯? (这里是 sbt 的新手。)
  • 我经常看到这种情况,但javacOptions 不只是用于在 sbt 中编译 Java 源文件吗? scalacOptions 对 scalac 编译器很重要。
  • 您可能还想要“scalacOptions := Seq("-target:jvm-1.8")”,正如@akauppi 指出的那样。
  • 对于新手(尤其是 Windows),请确保 PATH 和 JAVA_HOME 环境变量都已更新为分别使用 jdk8\bin 和 jdk8
【解决方案2】:

scalac 对 jvm-1.8 的支持已在 2.11.4 中添加。

Scala 版本 (2.11.2) 不支持 -target:jvm-1.8 选项。

$ scala -version
Scala code runner version 2.11.2 -- Copyright 2002-2013, LAMP/EPFL

$ scala -target
Usage: -target:<target>
 where <target> choices are jvm-1.5, jvm-1.6, jvm-1.7 (default: jvm-1.6)

bad option: '-target'

Usage: scala <options> [<script|class|object|jar> <arguments>]
   or  scala -help

All options to scalac (see scalac -help) are also allowed.

【讨论】:

  • 似乎是有效的答案。如果我想使用为 Java 8 编译且仅适用于 Java 8 的 Java 库,我可以从生成的 Scala 7 字节码中使用它吗?我想答案是肯定的。抱歉,这是一个不同的问题,但我正在尝试使用仅在我的 Scala 代码中适用于 Java 8 的 Java 库。
  • IntelliJ 用户的附加信息:如果您从 IntelliJ IDE 获得 Problem extracting project structure,这可能是由于 Java 版本的目标不正确或缺失,尤其是当您的 Java 版本中有多个版本时环境或上游树枝一定要试试上面的答案。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2012-07-30
  • 2021-11-22
相关资源
最近更新 更多