我最近更新到IntelliJ IDEA 2016.3并且我注意到每当我选择了一个带有java 7 SDK的项目时,IntelliJ就会用java 1.8.0_112-release(必须是一个java)编译项目与IntelliJ捆绑在一起的编译器,因为我自己从未安装过它。
如果我选择1.8.0_112版本以外的java 8 SDK,IntelliJ将使用该编译器进行编译。
如果我选择了java 7 SDK并在我的项目中运行main方法,IntelliJ将使用该java 7 SDK版本运行,因此问题似乎只与编译器有关。
我尝试重新安装所有的java安装。
当我更改SDK时,我通常只会更改Project Structure -> Project -> Project SDK
,但我也会验证语言级别是否正确且Project Structure -> Modules -> Dependencies -> Module SDK
是否正确。
默认情况下,所有设置均为:
Settings -> Build, Execution, Deployment -> Compiler/Java Compiler
在我看来,IntelliJ IDEA 2016.3无法使用低于java 8的java编译器,但我的谷歌搜索尝试无法证实这一点。
我还可以提一下,我还没有尝试过的唯一一件事是IntelliJ的硬卸载,我的所有设置都被擦除了。已尝试静默卸载。
如果我尝试使用Java 7 SDK编译新的Hello World项目,则这是“消息”选项卡中的输出:Information:Using javac 1.8.0_112-release to compile java sources
。但是,如果我将项目SDK设置为Java 8 SDK,则这是“消息”选项卡中的输出:Information:Using javac 1.8.0_45 to compile java sources
。
尝试将Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler -> Project bytecode version
设置为1.7而没有任何效果。
File -> Other Settings -> Default Project Structure -> Project SDK and Project language level
设置为Java 7 SDK。消息选项卡仍显示:Information:Using javac 1.8.0_112-release to compile java sources
有没有其他人经历过这种情况并知道导致这种行为的原因是什么?
答案 0 :(得分:3)
Apparantley这是由IntelliJ中的问题引起的,如this中所述 问题。
自IntelliJ IDEA版本2016.3.1起已解决,我在youtrack问题中复制粘贴 Eugene Zhuravlev 中的注释,以解释它是如何修复的:
为javac引入了一个新的编译器选项:File |设置|构建,执行,部署|编译器| Java编译器| "尽可能使用模块目标JDK中的编译器"。 " on"的默认值为"。 当启用此属性并且与模块关联的JDK与构建自己的JDK不同时,构建将优先使用关联JDK中的javac进行编译,而不是使用运行的JDK中的编译器进行编译。
答案 1 :(得分:1)
您需要设置两件事:
CTRL + ALT + SHIFT + S - >项目 - > Project SDK
CTRL + SHIFT + A - >输入" Java编译器" - >目标字节码版本
答案 2 :(得分:1)
Project Structure
和Default Project Structure
之间存在分歧(后者适用于新创建/签出的项目)。
Default Project Structure
隐藏在File -> Other Settings
中。
你会有Project SDK
和Project Language Level
。