资讯专栏INFORMATION COLUMN

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

Stardustsky / 2987人阅读

摘要:今天静态资源包到我们环境中只涉及到静态资源文件例如数据库连接信息查询语句等成功部署后启动服务报错如下经过分析和排查我们认为是本地的一种的问题上版本是打包涉及的和均是但本地的编译版本是将其改为打包部署后进程正常启动对这个问题网络上普遍的说法是

今天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)

经过分析和排查, 我们认为是本地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.所以在此存在两个疑问:

offset=6是什么意思?

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74360.html

相关文章

  • 慕课网_《新一代构建工具gradle》学习总结

    摘要:时间年月日星期二说明本文部分内容均来自慕课网。项目一个项目代表一个正在构建的组件比如一个文件,当构建启动后,会基于实例化一个类,并且能够通过变量使其隐式可用。任务动作定义了一个最小的工作单元。 时间:2017年05月16日星期二说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:无个人学习源码:https://github.com/zccod...

    antyiwei 评论0 收藏0
  • mongoose学习笔记(超详细)

    摘要:返回的是转换为字符串后的值。默认行为禁止在一个中如果没有定义域,那么将会默认分配一个域。通过在中设置这个字段可以阻止生成获得。我们也能设置其它的安全等级如表示如果秒内写操作没有完成,将会超时。在,和方法只检查顶级的的选项设置。 原文出处 名词解释 Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model: 由Schema编译而成的假想(fancy)构造器...

    Bowman_han 评论0 收藏0
  • Bootstrap 之 Metronic 模板的学习之路 - (6)自定义和扩展

    摘要:你可以用此模板作为你应用程序的起点。上一篇之模板的学习之路主题布局配置下一篇之模板的学习之路前端自动化工具 前面我们将 Metronic 的结构和源码大致浏览了一遍,Metronic 整个文件包有三百多兆,在实际项目中,我们肯定用不到所有文件,这时,我们需要做一些自定义。 自定义和扩展 CSS 部分 要重载 Metronic 主题的 CSS 样式,我们可以定制 ../assets/la...

    MoAir 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<