在Intellij中的Java-scala混合项目中指定Java版本
我有一个项目,其中包括java代码和scala代码 结构如下所示:在Intellij中的Java-scala混合项目中指定Java版本,java,scala,intellij-idea,Java,Scala,Intellij Idea,我有一个项目,其中包括java代码和scala代码 结构如下所示: --src -- main --java myjavacode.java --scala myscalacode.scala 现在,每当我运行sbt包,scala代码都将在Java7中编译,而Java代码将在Java8中编译 我想我已经将JDK指定为1.7,但是我仍然无法将java代码更改回Java7版本 我应该在Intellij或bui
--src
-- main
--java
myjavacode.java
--scala
myscalacode.scala
现在,每当我运行sbt包
,scala代码都将在Java7中编译,而Java代码将在Java8中编译
我想我已经将JDK指定为1.7,但是我仍然无法将java代码更改回Java7版本
我应该在Intellij或build.sbt文件中做什么?sbt在Scala方面非常聪明:您可以通过scalaVersion
属性指定需要哪个版本的Scala编译器和运行库,sbt将下载该版本并使用它编译Scala源代码
您还可以通过在scalacOptions
属性中指定-target
选项来指定Scala编译器发出的Java字节码的版本。例如
但是,在编译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的更多详细信息,请参阅。对于IntelliJ中的SBT构建,您需要指定与SBT一起使用的项目JDK。SBT在Scala方面非常聪明:您可以通过scalaVersion
属性指定所需的Scala编译器和运行库的版本,SBT将下载该版本并使用它编译Scala源代码
您还可以通过在scalacOptions
属性中指定-target
选项来指定Scala编译器发出的Java字节码的版本。例如
但是,在编译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的更多详细信息,请参阅。对于IntelliJ中的SBT构建,您需要指定与SBT一起使用的项目JDK。向我们展示您的构建。sbtbuild.SBT没有什么特别之处。我应该在sbt文件中添加“java版本”吗?告诉我们您的build.sbtbuild.sbt没有什么特别的。我应该在sbt文件中添加“java版本”吗?顺便说一句,我应该提到,如果您使用的是Scala 2.12,那么我认为Scala运行库将包含JVM 1.8字节码(这不是您可以更改的)。如果您希望程序在JVM 1.7上运行,您可能希望使用Scala 2.11或更早版本。顺便说一句,如果您使用Scala 2.12,那么我认为Scala运行库将包含JVM 1.8字节码(这不是您可以更改的)。如果您想让程序在JVM1.7上运行,您可能需要使用Scala 2.11或更早版本。