一个bug重温对JRE和JDK的关系思考

前几天做一个springboot项目时,导入的JAVA版本是17,然后后面想更贴近下企业中使用的JDK版本就改成了JDK 1,8,然后就编译错误,bug如下

java: java.lang.UnsupportedClassVersionError: org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessor has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0

这个bug的意思是告诉我们,我们的工程使用的是高版本的java去编译,但是使用低版本的java去运行它,更具体来说,我们使用了java17去编译完了工程文件,然后使用Java8去run这个工程。

关于这个bug如何修复,建议stackOverFollow,答案无非是统一下jdk版本和jre版本,但是我这个bug是由于引入的springboot版本是3.x版本的,默认使用java17,所以引入springboot项目时,如果项目使用java8那么就要引入2.x版本的springboot(重启解决百分百问题)

关于bug,这里涉及两个概念:编译和运行。这里解释一下,java是混合性语言,也就是Java即是编译型的,也是解释型语言,从编译角度,java任何工程文件都需要先进行编译,但是编译完了并不是直接运行,而是解释在jvm上的,这里的java运行环境,就是jre(java runtime environment),而jdk是java开发工具,里面包含了很多java大牛造的轮子,这样方便更多的程序员工作(感谢大牛赏口饭吃),总得来说jdk包含了jre和一些jar包,同时jre包含了jvm,在实际工作中,我们可以本地编译项目,编译完了部署在服务器中,因此本地需要安装jdk和服务器一般为了节省性能,可以只安装jre。

posted @ 2023-01-04 23:45  不要给我歪!  阅读(187)  评论(0编辑  收藏  举报