【问题标题】:Intellij insists on compiling with javac 11.0.3 instead of Java 7Intellij 坚持使用 javac 11.0.3 而不是 Java 7 进行编译
【发布时间】:2025-12-09 14:05:02
【问题描述】:

我有一个包含许多模块的项目,所有模块都需要使用 Java 7 进行编译。我已确保我所知道的每个设置都指向该版本的 Java,但不知何故,每次我重建项目时,我得到:

Information:javac 11.0.3 was used to compile java sources

后面是错误列表:

Warning:(86, 25) java: as of release 9, '_' is a keyword, and may not be used as an identifier

Error:(86, 25) java: cannot find symbol
  symbol:   class _
  location: class com.(...)`

以下其他问题,例如:

Can't resolve -source errors on IntelliJ with regards to Project Language Level

IntelliJ IDEA tells me "Error:java: Compilation failed: internal java compiler error idea"

我已经尝试了这些设置:

  • 在项目结构下 -> 项目 -> 项目 SDK:1.7
  • 项目结构 -> 项目语言级别 -> 7 - Diamonds、ARM、multi-catch 等
  • 在项目结构下 -> 模块检查了每个模块,这并不好玩,因为大约有 50 个。源选项卡 -> 语言级别:项目 detaulf(7 - Diamonds、ARM、multi-catch 等)
  • 项目结构 -> 模块,每个依赖项选项卡 -> 模块 SDK:项目 SDK (1.7)
  • 项目结构 -> SDKs:它列出了 IDEA 内置于 Java 11,所以我将其删除,只留下:1.7
  • 设置 -> Java 编译器 -> 使用编译器:Javac
  • 设置 -> Java 编译器 -> 尽可能使用来自模块目标 JDK 的编译器:未勾选
  • 设置 -> Java 编译器 -> 每模块字节码版本:所有模块设置为 1.7

我正在运行最新版本的 IntelliJ IDEA:

IntelliJ IDEA 2019.2 (Ultimate Edition) Build #IU-192.5728.98, built on July 23, 2019

这是 IDEA 的错误吗?

【问题讨论】:

  • 等等,你有一个名为_的类?
  • @Thomas 看着它,它指向一行@Getter(onMethod = @__(@JSONProperty(ignoreIfNull = true))) 它是@ 免责声明之后的_:我没有写这段代码,我不知道那一行是做什么的:)
  • 你试过Switch the boot JDK吗?
  • @ArnaudClaudel 您能否提供更多背景信息?我不确定这是什么意思
  • 它改变了 IntelliJ 的运行时,也许它默认用于编译。 Source

标签: java intellij-idea


【解决方案1】:

Intellij 选择 java 11 的原因如下: https://www.jetbrains.com/help/idea/configuring-build-jdk.html

IntelliJ IDEA 检查项目中使用的所有 JDK:JDK 在项目和模块级别上定义。

IntelliJ IDEA 计算这些 JDK 中的最新版本。这是必要的 确保所有模块都可以编译。

如果配置的最新JDK版本低于1.6, IntelliJ IDEA 将选择用于运行 IDE。 此限制与编译器 API 使用的事实有关 从 JDK 开始支持 IntelliJ IDEA 构建项目 1.6.

这就是switching the boot JDK to JDK8 重新启用旧 java 类的编译的原因。

【讨论】:

  • 好的,但是我在问题中提到的项目版本依赖于 JDK 1.7,因此不应该这样做
  • 你说得对,我遇到了类似的问题,但模块仍在使用 JDK 1.4。在您的情况下,它应该可以工作,因为没有配置低于 1.6 的 JDK。那么这可能是 Intellij-IDEA 中的一个错误?
【解决方案2】:

正如@Arnaud Claudel 在 cmets 中提到的,我尝试切换 IDEA 的引导 JDK(此处描述为 https://www.jetbrains.com/help/idea/switching-boot-jdk.html),这很有帮助。顺便说一句,IDEA 将接受的最低 JDK 版本是 8。

我不确定它是否是实际的解决方案,而不仅仅是一种解决方法,因为 IDE 为什么会首先使用 JDK 11,而忽略所有项目的设置。 因此,我将这个问题留给任何人发布更好的解决方案。

【讨论】:

  • 我认为这可能是一个实际的解决方案,因为 IntelliJ 的支持矩阵由 Jet Brains 确定。该版本接受的最低 JDK 可能是 8。我向您保证,几乎没有机会提出更好的解决方案。
  • 您是否暗示 Jet Brains 正在 IntelliJ 中放弃对 JDK7 项目的支持?因为我不认为这是正在发生的事情。
  • 实际上Java 7 本身已经结束了公开更新和Oracle 的支持。 Oracle 建议现有 Java 7 客户最早在 2015 年 4 月迁移到更高版本。java.com/en/download/faq/java_7.xml
  • 在这种情况下,尽管语言支持向后兼容性,但您不能期望 IDE 支持所有版本