IntelliJ IDEA告诉我"错误:java:编译失败:内部java编译器错误想法"

iea*_*czp 26 java intellij-idea

朋友首先,谢谢你的帮助.当我使用IntelliJ IDEA编译一个java项目时,它告诉我"编译失败:内部java编译器错误的想法".更多细节信息喜欢:信息:Eclipse编译器4.6.2用于编译java源信息:模块"sinoWeb"由于项目配置/依赖项更改而完全重建信息:2017/3/23 11:44 - 编译完成1错误和0警告5m 32s 949ms错误:java:编译失败:内部java编译器错误我很困惑.以下是我的设置.

输入图像说明

在此输入图像描述

小智 32

  1. Intellij IDEA上按Ctrl + Alt + S打开设置.
  2. 构建,执行,部署 - > 编译器 - > Java编译器
  3. Project字节码版本中选择您的Java 版本
  4. 取消选中尽可能使用模块目标JDK中的编译器
  5. 单击应用确定.

  • 好吧,我跳了祈雨舞,效果很好,但是为什么呢? (9认同)
  • 我还为我的模块设置了“目标字节码版本”,然后它就没有问题了。 (2认同)
  • @MarthinusEngelbrecht 字节码根据 JVM 版本的不同而不同,因此当您将所有设置为相同或在本例中设置为 null 时,它会从项目设置中进行选择。https://www.baeldung.com/java-lang-unsupportedclassversion (2认同)

Ton*_*him 19

就我而言,使用 Java 11,我有:

 public List<String> foo() {
   ...
   return response.readEntity(new GenericType<List<String>>() {});
Run Code Online (Sandbox Code Playgroud)

和 Intellij 建议我应该使用<>而不是GenericType<List<String>>,因此:

 public List<String> foo() {
   ...
   return response.readEntity(new GenericType<>() {});
Run Code Online (Sandbox Code Playgroud)

我在四个函数中做到了这一点,项目停止编译并出现内部编译器错误,恢复并再次编译。看起来像类型推断的错误。

  • 这里的模式相同,JDK 11(11.0.3 和测试的 11.0.5)在 maven 中编译良好,但在 IntelliJ 2019.2.2 中“错误:java:编译失败:内部 java 编译器错误”;崩溃是“jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitApply(Flow.java:1235)”上的“java.lang.NullPointerException”。添加了泛型的显式类型,问题就消失了。感谢您发布您的案例,它帮助我弄清楚了我的情况:) (2认同)

ome*_*ici 17

我将编译器更改为Eclipse并运行我的项目.后来改回Javac,问题解决了.我不知道确切的问题,但它可以帮助谁在寻找解决方案.

intellij java编译器

  • 这对我也有用。不知道为什么,但我会接受! (4认同)

vel*_*ity 16

对我来说,模块的目标字节码版本设置为 5。我将其更改为 8,错误消失了:

模块的字节码版本设置


sez*_*rug 15

我通过在IntelliJ的编译器设置上增加Build进程堆大小的默认值(700)来解决了这个问题.

在此输入图像描述

  • 这就是为我解决的!会在那里坐 25 分钟,否则就会失败。 (3认同)

Fil*_*mat 14

就我而言,这是因为lombok带有 intellij 2019.2 和 java11的库。

根据此 IDEA 错误,解决方法的想法再次起作用:

Disable all building from intelliJ and dedicate the build to Maven.

在此处输入图片说明


pri*_*ime 13

JIdea 2020.1.2 及以上版本中

这可能是项目结构中设置的语言级别与目标字节码版本不兼容。

您必须更改目标字节码版本。

  1. 转到设置[ Ctrl+Alt+S ]
  2. 选择Java 编译器
  3. 在表格中选择模块
  4. 更改字节码版本以映射您在上一步中为语言级别选择的内容

在此处输入图片说明

注意: 如何检查语言级别

  1. 转到项目结构[ Ctrl+ Alt+ Shift+ S ]
  2. 选择模块子部分
  3. 选择每个模块
  4. 在源部分下,检查语言级别

在此处输入图片说明


小智 8

每模块字节码版本设置

我遇到了同样的问题

我通过将目标字节码错误从 1.5 更改为 8 来解决它


dev*_*ess 6

就我而言,响应类型为restTemplate在此输入图像描述

ResponseEntity<Map<String, Integer>> response = restTemplate.exchange(
        eurl,
        HttpMethod.POST,
        requestEntity,
        new ParameterizedTypeReference<>() { <---- this causes error
        }
);
Run Code Online (Sandbox Code Playgroud)

应该是这样的:

ParameterizedTypeReference<Map<String, Integer>> responseType = new ParameterizedTypeReference<>() {};

ResponseEntity<Map<String, Integer>> response = restTemplate.exchange(
        url,
        HttpMethod.POST,
        requestEntity,
        responseType
);
Run Code Online (Sandbox Code Playgroud)


小智 5

您必须禁用 Javac 选项:尽可能使用来自模块目标 JDK 的编译器。 在此处输入图片说明


Jay*_*Jay 5

它可能与本案无关,但是:

当我更改显式类型参数列表时出现此错误:

new ParameterizedTypeReference<List<SomeDtoObject>>()
Run Code Online (Sandbox Code Playgroud)

<>

new ParameterizedTypeReference<>()
Run Code Online (Sandbox Code Playgroud)

restTemplateIntellij 发出警告后的通话中,请<>改为使用。

当我将更改撤回到显式类型参数时,它得到了修复。