在服务器上部署好tomcat服务之后,准备在eclipse上开发一点小程序放至centos服务器上运行,没想出现版本差异报错:tacktrace:] with root cause, java.lang.UnsupportedClassVersionError: article/ArticleList has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class [article.ArticleList])。本文地址:http://8408.cn/article/861.html,未经许可,不得转载.
#tomcat服务器上记录的日志内容如下: ==> localhost.2020-09-24.log <== 24-Sep-2020 15:54:14.693 SEVERE [http-nio-8080-exec-1] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [jsp] in context with path [/04007api] threw exception [javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: article/ArticleList has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class [article.ArticleList])] with root cause java.lang.UnsupportedClassVersionError: article/ArticleList has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class [article.ArticleList])
查看服务器上的java版本,java和javac均是1.8.0_265,如果class文件均是在服务器上编译和运行的话,不存在编译和运行的版本不对的问题。本文地址:http://8408.cn/article/861.html,未经许可,不得转载.
[root@04007 jvm]# java -version openjdk version "1.8.0_265" OpenJDK Runtime Environment (build 1.8.0_265-b01) OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode) You have mail in /var/spool/mail/root [root@04007 bin]# javac -version javac 1.8.0_265 [root@04007 bin]# echo $JAVA_HOME [root@04007 bin]#
但现在报的是这个错误,我在想会不会是和我发布的方式有关,我是通过导出.war包发布至服务器上运行,在重启tomcat服务之后,会自动将.war包解压下来,同时解压的还有class文件,我尝试着删除class文件,以期服务器在运行时会检测是否存在class文件时发现不存在会重新编译,但发现tomcat运行时并不会去调用编译java文件。说明tomcat运行的时候根本不会去编译java文件成class。那难道java程序发布的时候都需要同时带上class文件?理论上应该不可能需要这样!本文地址:http://8408.cn/article/861.html,未经许可,不得转载.
尝试在服务器上运行查找JAVA_HOME目录,打印出来是空,看来服务器上的环境变量尚不正确,修理一下这方面吧。在centos上查找JDK安装路径,写入/etc/profile文件并source加载,过程如下:本文地址:http://8408.cn/article/861.html,未经许可,不得转载.
#查找centos上的JDK安装路径 [root@04007 bin]# whereis java java: /usr/bin/java /etc/java /usr/lib/java /usr/share/java /usr/share/man/man1/java.1.gz [root@04007 bin]# ll /usr/bin/java lrwxrwxrwx 1 root root 22 Sep 24 09:55 /usr/bin/java -> /etc/alternatives/java [root@04007 bin]# ll /etc/alternatives/java lrwxrwxrwx 1 root root 46 Sep 24 09:55 /etc/alternatives/java -> /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java [root@04007 bin]# ll /usr/lib/jvm/ ...... lrwxrwxrwx 1 root root 26 Sep 24 09:55 java -> /etc/alternatives/java_sdk lrwxrwxrwx 1 root root 32 Sep 24 09:55 java-1.8.0 -> /etc/alternatives/java_sdk_1.8.0 drwxr-xr-x 9 root root 4096 Sep 24 09:55 java-1.8.0-openjdk-1.8.0.265.b01-0.el6_10.x86_64 drwxr-xr-x 9 root root 4096 Sep 24 09:55 java-1.8.0-openjdk-1.8.0.265.b01-0.el6_10.x86_64-debug #jdk的安装路径 lrwxrwxrwx 1 root root 48 Sep 24 09:55 java-1.8.0-openjdk.x86_64 -> java-1.8.0-openjdk-1.8.0.265.b01-0.el6_10.x86_64 ...... #写入/etc/profile文件并source加载 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk.x86_64 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib/rt.ja
但意料之中这并没有解决上面遇到的问题。看来通过打.war包和这错误有关联,那只能考虑在开发环境中变更编译的java版本了,我本机的java环境是11,和上面的报错版本有点吻合,可以通过修改eclipse中的windows->preferences->java->compiler中的JDK complier版本号来修改编译的版本,如下图,不过这里还需要注意右上角有一个configure project specific settings。可能修改了当前配置,但项目的配置还是用的之前的统一配置,我就因为只改了这里发现一直未成功,多次摸索找到这个点。另外还有--release,我尝试点选这项之后看到有个提示:when using --release , it is recommended to use a JRE version 12 or grenter. 看提示建议我们只在JRE12或之上的版本里使用,所以不要钩选。本文地址:http://8408.cn/article/861.html,未经许可,不得转载.
本文地址:http://8408.cn/article/861.html,未经许可,不得转载.
通过修改项目的JDK complier版本号为1.8之后(注意是configure project specific settings)再次进行export war包放至服务器运行,终于成功。本文地址:http://8408.cn/article/861.html,未经许可,不得转载.
本文地址:http://8408.cn/article/861.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
手机扫码直接打开本页面 |