SBT 对于 Scala 来说非常聪明:您可以通过scalaVersion 属性,SBT 将下载该版本并使用它来编译您的 Scala 源代码。
您还可以通过在scalacOptions 属性中指定-target 选项来指定Scala 编译器发出的Java 字节码 的版本。例如,
scalacOptions += "-target:jvm-1.7"
但是,在编译 Java 源代码时,会使用您当前用来运行 SBT 的所选 JDK。因此,如果 Java 8 是您的默认版本 Java,并且用于运行 SBT,那么这就是用于编译您的 的版本>Java 来源 - 我不相信您可以在 SBT 构建文件中对此做任何事情,除非抱怨当前的 Java 版本是否为错误的。
但是,您可以指定最低 Java 版本,然后使用 Java 编译器的-source 和-target 选项来限制语法和输出到版本你需要。
例如,以下内容适用于 1.7 之后的任何 Java 版本,但仅编译遵循 1.7 语法的文件,并输出 1.7 字节码:
// We need at least Java 7.
initialize := {
val _ = initialize.value // Needed to run previous initialization.
assert(scala.util.Properties.isJavaAtLeast("1.7"), "My project requires Java 7 or later")
}
// Configure Java compiler appropriately.
javacOptions ++= Seq(
"-source", "1.7",
"-target", "1.7",
"-bootclasspath", "C:\\jdk1.7.0\\lib\\rt.jar"
)
请注意,您仍然需要访问 Java 1.7 运行时库(其位置由 -bootclasspath 参数指定)。
如果这不起作用,那么您需要通过更改 SBT 的配置来指定所需的 Java 版本。从命令行运行 SBT 时,请参阅this question 了解更多详细信息。对于 IntelliJ 中的 SBT 构建,您需要指定要与 SBT 一起使用的项目 JDK。