【问题标题】:IntelliJ IDEA tells me "Error:java: Compilation failed: internal java compiler error idea"IntelliJ IDEA 告诉我“错误:java:编译失败:内部 java 编译器错误想法”
【发布时间】:2017-08-15 11:12:22
【问题描述】:

当我使用 IntelliJ IDEA 编译 Java 项目时,它给了我以下输出(和错误):

Information:Eclipse compiler 4.6.2 was used to compile java sources
Information:Module "sinoWeb" was fully rebuilt due to project configuration/dependencies changes
Information:2017/3/23 11:44 - Compilation completed with 1 error and 0 warnings in 5m 32s 949ms
Error:java: Compilation failed: internal java compiler error

我对此感到很困惑!以下是我的设置:

【问题讨论】:

  • A 特定的 java 项目或您尝试的任何项目?
  • 不是真的,这是一个普通的项目。
  • 然后尝试提供minimal reproducible example。不确定我们是否可以提供其他帮助。或者向 JetBrains 写一份错误报告。
  • 切换到 javac 而不是 Eclipse 编译器。
  • 其实我的javaWeb项目在其他地方有些毛病。也许换句话说,它不是一个完整的javaWeb项目,所以我必须使用eclipse编译器而不是javac来忽略一些错误。

标签: java intellij-idea


【解决方案1】:
  1. Intellij IDEA Ctrl + Alt + S 上打开设置。
  2. 构建、执行、部署 -> 编译器 -> Java编译器
  3. 项目字节码版本中选择你的java版本
  4. 取消选中尽可能使用来自模块目标 JDK 的编译器
  5. 点击应用ok

【讨论】:

  • 好的,我做了雨舞,效果很好,但是为什么呢?
  • 我还为我的模块设置了“目标字节码版本”,然后它就可以正常工作了。
  • @MarthinusEngelbrecht 字节码因 JVM 版本而异,因此当您将 all 设置为相同或在本例中为 null 时,它会从项目设置中选择。 baeldung.com/java-lang-unsupportedclassversion
【解决方案2】:

我通过在 IntelliJ 的编译器设置中增加 Build process heap size 的默认值 (700) 解决了这个问题。

【讨论】:

  • 这就是为我解决的问题!会坐在那里 25 分钟,否则会失败。
【解决方案3】:

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

【讨论】:

  • 这对我也有用。不知道为什么,但我会接受的!
【解决方案4】:

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

 public List<String> foo() {
   ...
   return response.readEntity(new GenericType<List<String>>() {});

Intellij 建议我应该使用&lt;&gt; 而不是GenericType&lt;List&lt;String&gt;&gt;,例如:

 public List<String> foo() {
   ...
   return response.readEntity(new GenericType<>() {});

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

【讨论】:

  • 这里的模式相同,JDK 11(11.0.3 和测试的 11.0.5),在 maven 中编译良好,但在 IntelliJ 2019.2.2 中编译为 Error:java: Compilation failed: internal java compiler error;崩溃是java.lang.NullPointerExceptionjdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitApply(Flow.java:1235) 上。为泛型添加了显式类型,问题就消失了。感谢您发布您的案例,它帮助我弄清楚了我的情况:)
  • 谢谢。 JDK 11 也在这里。同样的问题。
  • 这和我遇到的问题一模一样,谢谢你发帖 tony
【解决方案5】:

在我的情况下,这是因为带有 intellij 2019.2 和 java11 的 lombok 库。

根据this IDEA bug 在解决方法想法再次起作用后:

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

【讨论】:

  • 谢谢!这很有效,而且 IMO 是基于 Maven 的项目的最佳解决方案,因为在重新导入基于 Maven 的项目后,对编译器设置等的任何手动更改都将被重置。
  • 这行得通,但它仍然不会在调试断点处停止,并且永远不会终止被调试的进程。
  • 这也发生在一个没有使用 Lombok 的项目上,Java 8,idea 2020.3。但是安装了 Lombok 插件。执行建议的操作也为我修复了它,不确定它是否相关..
【解决方案6】:

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

【讨论】:

    【解决方案7】:

    JIdea 2020.1.2及以上版本中,

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

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

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

    注意: 如何检查语言级别

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

    【讨论】:

    • 工作就像一个魅力,谢谢
    【解决方案8】:

    我遇到了同样的问题

    我通过将目标字节码错误从 1.5 更改为 8 解决了这个问题

    【讨论】:

      【解决方案9】:

      您必须禁用 Javac 选项:尽可能使用来自模块目标 JDK 的编译器。

      【讨论】:

        【解决方案10】:

        将项目设置中的语言级别 (Ctrl + Alt + Shift + S) 更改为 Java 8 解决了我的问题

        【讨论】:

          【解决方案11】:

          就我而言,它是restTemplate 中的响应类型:

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

          应该是这样的:

          ParameterizedTypeReference<Map<String, Integer>> responseType = new ParameterizedTypeReference<>() {};
          
          ResponseEntity<Map<String, Integer>> response = restTemplate.exchange(
                  url,
                  HttpMethod.POST,
                  requestEntity,
                  responseType
          );
          

          【讨论】:

          • 我刚刚遇到了同样的问题,我很高兴我偶然发现了这个答案,但我正在摸不着头脑为什么会这样。这段代码在这里也有效:restTemplate.exchange(url, HttpMethod.GET, request, new ParameterizedTypeReference>() {});如果您使用 ,Java 编译器似乎在推断正确类型时存在问题。但 IntelliJ 仍然建议用 替换显式版本。来自编译器的错误信息也完全没有价值。甚至没有提到导致问题的文件!
          【解决方案12】:

          我遇到了同样的问题。我修复了更改我的设置。目标字节码版本等于项目字节码版本。

          【讨论】:

            【解决方案13】:

            对我有用的是更新 Open JDK 版本

            【讨论】:

              【解决方案14】:

              我在使用旧版 JDK(openjdk 版本“11”2018-09-25)的 Windows 10 上使用 Community edition 2020.3 时遇到了同样的错误。

              将 JDK 更新到 javac 11.0.10 解决了这个问题。

              这是使用 openjdk 版本“11”2018-09-25 时出现错误的堆栈跟踪:

              java: compiler message file broken: key=compiler.misc.msg.bug arguments=11, {1}, {2}, {3}, {4}, {5}, {6}, {7}
              java: java.lang.AssertionError
              java:   at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:155)
              java:   at jdk.compiler/com.sun.tools.javac.util.Assert.check(Assert.java:46)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$2$1.setOverloadKind(DeferredAttr.java:172)
              java:   at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr.visitReference(ArgumentAttr.java:283)
              java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:2190)
              java:   at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr.attribArg(ArgumentAttr.java:197)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribArgs(Attr.java:751)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1997)
              java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1634)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:655)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3573)
              java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2110)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitApply(Attr.java:2006)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitReturn(Attr.java:1866)
              java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1546)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:724)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:743)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1294)
              java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1020)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr.attribSpeculative(DeferredAttr.java:498)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr.attribSpeculative(DeferredAttr.java:481)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr.attribSpeculativeLambda(DeferredAttr.java:456)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredAttrNode$StructuralStuckChecker.canLambdaBodyCompleteNormally(DeferredAttr.java:900)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredAttrNode$StructuralStuckChecker.visitLambda(DeferredAttr.java:878)
              java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1807)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredAttrNode$StructuralStuckChecker.complete(DeferredAttr.java:832)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredType.check(DeferredAttr.java:335)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredAttrNode.process(DeferredAttr.java:779)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredAttrContext.complete(DeferredAttr.java:626)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Infer.instantiateMethod(Infer.java:214)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.rawInstantiate(Resolve.java:605)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.selectBest(Resolve.java:1563)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.findMethodInScope(Resolve.java:1733)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1802)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.findMethod(Resolve.java:1776)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve$10.doLookup(Resolve.java:2654)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve$BasicLookupHelper.lookup(Resolve.java:3293)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.lookupMethod(Resolve.java:3543)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.resolveQualifiedMethod(Resolve.java:2651)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.resolveQualifiedMethod(Resolve.java:2645)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.selectSym(Attr.java:3721)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3601)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitLambda(Attr.java:2598)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$4.complete(DeferredAttr.java:374)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredType.check(DeferredAttr.java:321)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve$MethodResultInfo.check(Resolve.java:1060)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve$4.checkArg(Resolve.java:887)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve$AbstractMethodCheck.argumentsAcceptable(Resolve.java:775)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve$4.argumentsAcceptable(Resolve.java:896)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Infer.instantiateMethod(Infer.java:181)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.checkMethod(Resolve.java:644)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.checkMethod(Attr.java:4120)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.checkIdInternal(Attr.java:3913)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.checkMethodIdInternal(Attr.java:3814)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.checkId(Attr.java:3803)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3696)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitLambda(Attr.java:2595)
              java:   at jdk.compiler/com.sun.tools.javac.comp.DeferredAttr$DeferredAttrNode.process(DeferredAttr.java:811)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitIdent(Attr.java:3553)
              java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:2243)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:702)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitExec(Attr.java:1773)
              java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1452)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1098)
              java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:866)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4683)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4574)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4523)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4503)
              java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attrib(Attr.java:4448)
              java:   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1341)
              java:   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:973)
              java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
              java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
              java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
              java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
              java:   at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:231)
              java:   at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:501)
              java:   at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:353)
              java:   at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:277)
              java:   at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:231)
              java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1441)
              java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1100)
              java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1224)
              java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:1066)
              java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:832)
              java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:419)
              java:   at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:183)
              java:   at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:132)
              java:   at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:302)
              java:   at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:132)
              java:   at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:219)
              java:   at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
              java:   at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
              java:   at java.base/java.lang.Thread.run(Thread.java:834)
              java: Compilation failed: internal java compiler error
              java: Errors occurred while compiling module 'project'
              javac 11 was used to compile java sources
              Finished, saving caches...
              Compilation failed: errors: 1; warnings: 100
              

              【讨论】:

                【解决方案15】:

                更新了 Java 编译器以更正“目标字节码版本”,在我的例子中是 8:

                【讨论】:

                  【解决方案16】:

                  设置 -> 构建 -> 编译器 -> Java 编译器 模块的目标字节码版本错误。我把它设置为 1.8,然后它工作了。

                  【讨论】:

                    【解决方案17】:

                    其中一个原因可能是 jdk 版本不是你项目的最小版本。

                    【讨论】:

                    • 你能给出解决这个问题的方法吗?
                    【解决方案18】:

                    注意JDK-8177068 问题,这会导致类似的内部错误

                    java.lang.NullPointerException
                            at jdk.compiler/com.sun.tools.javac.comp.Flow$FlowAnalyzer.visitApply(Flow.java:1233)
                            at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1628)
                            at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
                            at jdk.compiler/com.sun.tools.javac.comp.Flow$BaseAnalyzer.scan(Flow.java:393)
                            at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.visitExec(TreeScanner.java:213)
                            ...
                    

                    它已在 JDK 11.0.12JDK 14 b14 中修复,因此升级有所帮助。

                    【讨论】:

                      【解决方案19】:

                      在我的情况下,我必须转到 help &gt; show logs in files,它会打开 idea.logbuild-log 类似的文件夹

                      /home/user/.cache/JetBrains/IntelliJIdea2021.2/log/build-log/ 我在log4j.rootLogger=debug, filebuild-log.properties 中将日志级别设置为DEBUG

                      然后我再次运行构建并看到

                      2021-11-27 19:59:39,808 [ 133595]  DEBUG - s.incremental.java.JavaBuilder - Compiling chunk [module] with options: "-g -deprecation -encoding UTF-8 -source 11 -target 11 -s /home/user/project/target/generated-test-sources/test-annotations", mode=in-process
                      2021-11-27 19:59:41,082 [ 134869]  DEBUG - s.incremental.java.JavaBuilder - java:ERROR:Compilation failed: internal java compiler error
                      

                      这让我看到这可能与 junit 测试编译失败有关。事实证明,我有一个老式引擎和 jupiter 引擎的较旧/不匹配,它们可能具有与上述错误相关的不同 Java 版本。将它们更改为相同的 ${version.junit} 消除了错误。

                        <dependency>
                                  <groupId>org.junit.platform</groupId>
                                  <artifactId>junit-platform-launcher</artifactId>
                                  <version>1.6.2</version>
                                  <scope>test</scope>
                              </dependency>
                              <dependency>
                                  <groupId>org.junit.platform</groupId>
                                  <artifactId>junit-platform-commons</artifactId>
                                  <version>1.7.1</version>
                                  <scope>test</scope>
                              </dependency>
                              <dependency>
                                  <groupId>org.junit.jupiter</groupId>
                                  <artifactId>junit-jupiter-engine</artifactId>
                                  <version>${version.junit}</version>
                                  <scope>test</scope>
                              </dependency>
                              <dependency>
                                  <groupId>org.junit.vintage</groupId>
                                  <artifactId>junit-vintage-engine</artifactId>
                                  <version>${version.junit}</version>
                                  <scope>test</scope>
                              </dependency>
                      

                      简而言之,您的一些依赖 jar 可能有不匹配的 java 版本。

                      【讨论】:

                        【解决方案20】:

                        在我的情况下Information:java: java.lang.OutOfMemoryError: GC overhead limit exceeded intellij

                        增加了编译器 -> 构建进程堆大小

                        参考:https://intellij-support.jetbrains.com/hc/en-us/community/posts/360003315120-GC-overhead-limit-exceeded

                        【讨论】:

                          猜你喜欢
                          • 2014-06-22
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2018-07-04
                          • 1970-01-01
                          • 2016-01-06
                          • 2015-09-13
                          • 1970-01-01
                          相关资源
                          最近更新 更多