This article is meant as an extension to Angie Jones’ “IntelliJ – Error:java: release version 5 not supported”.
Angie在她的文章中建议IntelliJ IDEA解决方案,其中显示错误消息“不支持发行版本5”。 前两个选项在IDEA中有效,但不可持续,您将在后面学习。 最后一个选项可以解决实际问题,但仅适用于基于Maven的版本。 回顾一下,基于Maven的构建的正确解决方案(另请参见Maven编译器插件)如下:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
我想为这个问题提供一些背景知识,并建议以不同的方式解决该问题。
What is the actual problem?
为了找到适用于所有Java项目的合适解决方案,无论使用哪种构建工具,让我们深入研究实际问题。
在过去的20多年中,Java经历了几个主要版本。 每一个都引入了新版本的二进制格式,有时还引入了语言功能(例如Java 5中的枚举,Java 8中的lambda,Java 9中的模块,Java 10中的var,Java-2中的var,HTTP-2客户端Java 11…)。 但是,Java及其虚拟机高度向后兼容。 您可以使用20年的二进制文件,它们将与最新版本的Java一起运行就可以了(有例外)。
从Java源文件生成二进制文件的Java编译器支持交叉编译为各种语言级别,即以不同Java版本的格式创建这些二进制文件。 但是,有时不再支持较旧的语言级别。 从Java 9开始,编译器无法再生成Java 5二进制文件。 如果现在使用目标版本的Java 5直接或通过构建工具间接运行编译器,它将显示错误消息发行版本5不支持。
该错误消息的根本问题是Java开发工具包(JDK)太新了,无法生成旧的二进制文件。
Proper Solutions
因此,您的JDK太新了,无法生成Java 5二进制文件。 有两种解决此问题的方法。
Use an older JDK
如前所述,JDK 9放弃了对交叉编译到Java 5二进制文件的支持。 这意味着,只要您使用JDK 8或更低版本,您就可以实际创建Java 5二进制文件。 但是,不建议使用此方法。 在生产运行时环境中应该没有理由坚持使用Java 5。 自2015年以来不支持JDK 5,并且不再提供安全补丁。
Change the desired target language level
您应该创建与生产环境中的Java运行时环境版本匹配的二进制文件,而不是交叉编译为Java 5二进制文件。 在2023年之前,至少应使用Java 8才能获得安全补丁。 另请参阅Wikipedia上的Java版本历史记录。 但是,我建议使用Java 11来利用介于LTS和LTS版本之间的各种新功能。
那么,如何更改目标版本呢?
Maven-based projects
出于非常好的原因,Maven仍广泛用于Java生态系统中。 但是,Maven已经很老了,一些默认设置也是如此。 其中之一是语言级别,无论您使用什么JDK,它默认为Java 1.5。
解决方式1:全局设置
<一劳永逸解决>
在 maven地址\conf\setting.xml中设置默认jdk版本…
代码:1.8是你自己的jdk版本号,下面提供java1.8和java17。
<profiles>
<profile>
<id>jdk1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
<encoding>UTF-8</encoding>
</properties>
</profile>
</profiles>
<profiles>
<profile>
<id>jdk17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
<encoding>UTF-8</encoding>
</properties>
</profile>
</profiles>
将上述代码放到maven\conf\setting.xml中并且复制一份到 C:\Users\本地用户名.m2中
我的是C:\Users\xx.m2
解决方式2( 在每次建立新项目时候需要重新配置):
<半劳永逸解决>
好的实践:在项目中单独配置jdk版本。将项目在其它设备上依然能够保证所用jdk版本正确。
推荐此种方式!
在自己的项目中单独配置pom.xml文件指定编译的jdk版本。
方法:pom.xml文件添加配置,注意<build>
标签位置与<dependencies>
同级,位于<project>
标签下。
下列指定编译版本。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
解决方式3( 在每次建立新项目时候需要重新配置):
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
解决方式4:
直接Ctrl+shit+alt+s出现以下面版
因为我本地安装的jdk是14版本,所以这里显示的就是14版本,这里没有问题,然后向下找module模块,然后发现这里的langeage level居然是5.
修改到对应的版本,然后应用保存就可以关闭了。
然后去File里找Settings打开,在打开的页面中找到Build开头的那一串,接着找它下面Compiler下的java compiler,右侧还要修改成自己所使用的java版本
最后应用保存,就可以正常使用了。
重启idea
设置完成后,新建maven项目,不用修改设置即可编译成功.
Plain IntelliJ IDEA projects
如果您没有在IntelliJ中为Java项目选择任何构建系统,则只需确保已根据项目的JDK配置了语言级别。 您可以在项目结构设置中执行此操作。 按cmd + shift + A并开始输入内容以打开设置。 使用JDK 9+时,您需要立即更改目标级别。
Java 9-11:目标级别Java 6Java 12+:目标级别Java 7
Conclusion
在这篇文章中,我解释了错误消息发行版5不支持的根本原因。 通过更改IntelliJ项目设置,可以在本地解决此问题。 但是,如果您想正确解决问题,则需要更改项目的构建配置文件。 否则,在下次导入IntelliJ时,您将需要再次更改它。 此外,该版本在每台计算机上的行为可能会有所不同。 CI服务器和其他未更改IntelliJ IDEA设置的服务器将继续生成Java 5二进制文件。 在构建配置文件中保留语言级别将在机器之间产生稳定且可预见的结果。
借鉴:https://blog.csdn.net/cunxiedian8614/article/details/105696396?spm=1001.2014.3001.5506