[Java SE]javac编译时编码错误

1 问题复现

Information:java: javacTask: 源发行版 8 需要目标发行版 1.8
Information:java: Errors occurred while compiling module 'SSMDemo'
Information:javac 1.8.0_261 was used to compile java sources
Information:2020/10/12 0:32 - Build completed with 1 error and 0 warnings in 1 s 309 ms
Error:java: Compilation failed: internal java compiler error

2 原因分析

step1 查看文件编码

LambdaTest.java : UTF-8

方法1: windows中查看文件编码:(选中目标文件)>(鼠标右键,记事本打开)>另存为>编码(查看当前的编码字符集)

方法2: IDEA>打开目标文件>(界面右下角)

step2 查看 javac 的命令说明(帮助文档)

javac -help

由此,结合错误信息,可猜测:
Q:为什么在CMD命令行下编译和在IDEA中编译均报此异常?
A:javac此时编译时,使用的 系统默认的GBK进行【解码】和编译,而java文件使用UTF-8进行【编码】,从而导致的错误。

step3 验证: 为javac编译器【指定字符集】进行【解码】和编译

javac -encoding utf-8 LambdaTest.java

结果: 无任何报错信息,编译成功!

step4 解决异常:Compilation failed: internal java compiler error

经测试:
1.IDEA中的异常与其编译器编译时的字符集无关。
2.与java文件(使用了JDK1.8的新特性————Lambda语法),而IDEA中设置JDK(JDK1.8)的实际JDK语法版本为1.7的语法。1.7的语法,自然不支持1.8的语法了。
(即 1.8向下兼容以前版本的语法)

针对异常Compilation failed: internal java compiler error

解决方案:Setting->Compiler->Java Compiler>设置相应Module的【target byte code version】的版本

X 参考文献

原文地址:https://www.cnblogs.com/johnnyzen/p/13800591.html