[存疑] JVMCFRE003 bad major version, offset=6

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了[存疑] JVMCFRE003 bad major version, offset=6脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

今天deploy静态资包到我们PRoduction环境, package中只涉及到静态资源文件, 例如数据库连接信息, SQL查询语句等. 成功部署后, 启动服务报错如下:

Exception in thread "main" java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=support/operations/gtm/iosbackendmanager/BackendManager, offset=6     at java.lang.ClassLoader.defineClassImpl(Native Method)     at java.lang.ClassLoader.defineClass(ClassLoader.java:324)     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:155)     at java.net.URLClassLoader.defineClass(URLClassLoader.java:715)     at java.net.URLClassLoader.access$400(URLClassLoader.java:94)     at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1169)     at java.security.AccessController.doPrivileged(AccessController.java:492)     at java.net.URLClassLoader.findClass(URLClassLoader.java:598)     at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:777)     at java.lang.ClassLoader.loadClass(ClassLoader.java:750)     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:341)     at java.lang.ClassLoader.loadClass(ClassLoader.java:731)     at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495) </verbosegc>

经过分析和排查, 我们认为是本地RAD(eclipse的一种)的JDK level问题, server上java版本是1.7, Ant打包涉及的source和target均是1.7, 但本地RAD的JDK编译版本是1.8, 将其改为1.7, 打包部署后, 进程正常启动.


对这个问题, 网络上普遍的说法是"是因为我们使用高版本的JDK编译的Java class文件试图在较低版本的JVM上运行" , 所以解决办法通常都是更改本地JDK编译环境, 很典型的例子是这个: UnsupportedClassVersionError: JVMCFRE003 bad major version in WebSphere AS 7 . 但在这个case里, 我deploy的部分不涉及任何已编译的class.所以在此存在两个疑问:

  1. offset=6是什么意思?
  2. JDK编译环境版本是否会影响静态资源的编译?

这也是第一次使用自动化打包和部署工具(UCD)来部署这一部分. 因为是生产环境, 所以在做这个Change之前还是比较紧张的, 预想的问题主要有两个:
1, Deploy process问题, 2, 静态资源乱码问题.
第一个确实出了一点故障, 没有bin路径的改动, 但在Process的步骤里没有选择"allow failure", 所以在复制bin文件夹时会报文件夹为空的错并停止运行. 选上allow failure即可.
2, 乱码问题是一如既往, 而这个版本的更改中更是涉及到了有currency符号: "¤". 所以只能文件以东欧编码ISO-8859-2形式保存. 这还需要更多的调查, 源码对于utf8和其他格式编码的处理逻辑.
这次是预想的问题都没有发生, 反而出现奇奇怪怪的问题, 搞的大家都很紧张, 好在问题已经解决. 不过还需要更多的调查.

how to check the jdk version used to compile a .class file - duplicate

脚本宝典总结

以上是脚本宝典为你收集整理的[存疑] JVMCFRE003 bad major version, offset=6全部内容,希望文章能够帮你解决[存疑] JVMCFRE003 bad major version, offset=6所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。