交代一下背景:公司运行的一个上线项目,打了个补丁发给客户后,反馈说运行不了。把源码拿回来场景重现。贴上报错信息:

08-15 14:13:29 ERROR doPost(jcm.framework.rmi.RMIServlet:155) - SchedulerService.forceRunJobFlow error.
未指定错误,请查看详细信息
at jcm.framework.rmi.ClientService.execute(ClientService.java:129)
at ...(...)
at jcm.flowengine.impl.JobFlowEngine.runJobFlow(JobFlowEngine.java:230)
Caused by: java.lang.UnsupportedClassVersionError: jcm/flowengine/impl/JobFlowInstance : Unsupported major.minor version 52.0 (unable to load class jcm.flowengine.impl.JobFlowInstance)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2908)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at jcm.flowengine.impl.JobFlowEngine.runJobFlow(JobFlowEngine.java:230)
at jcm.scheduler.impl.StdScheduler.forceRun(StdScheduler.java:190)
at jcm.scheduler.service.SchedulerService.forceRunJobFlow(SchedulerService.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at jcm.framework.rmi.ClientService.execute(ClientService.java:113)
at jcm.framework.rmi.RMIServlet.doPost(RMIServlet.java:113)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

查看报错信息,发现是由于JDK版本不对导致。客户运行的项目编译版本是JDK1.5,补丁编译版本是JDK1.8。

要解决这问题,首先我们得知道客户运行的版本是多少。这里有个方法:随便复制一个客户项目的jar包,用解压缩工具解压,在CMD命令中切换到当前

目录,输入命令:javap -verbose classname

classname为解压出来的任意一个class文件名。

会一下信息输出:

Classfile /E:/abc/JCMCommon/jcm/common/LogInfo.class
Last modified 2015-6-3; size 3087 bytes
MD5 checksum 8d1347215ae5933e04ad60dacbadfe41
Compiled from "LogInfo.java"
public abstract class jcm.common.LogInfo extends java.lang.Enum<jcm.common.LogInfo>
Signature: #138 // Ljava/lang/Enum<Ljcm/common/LogInfo;>;
SourceFile: "LogInfo.java"
InnerClasses:
static final #8; //class jcm/common/LogInfo$1
static final #12; //class jcm/common/LogInfo$2
static final #16; //class jcm/common/LogInfo$3
static final #20; //class jcm/common/LogInfo$4
static final #24; //class jcm/common/LogInfo$5
static final #28; //class jcm/common/LogInfo$6
static final #32; //class jcm/common/LogInfo$7
static final #36; //class jcm/common/LogInfo$8
static final #40; //class jcm/common/LogInfo$9
static final #44; //class jcm/common/LogInfo$10
static final #48; //class jcm/common/LogInfo$11
static final #52; //class jcm/common/LogInfo$12
static final #56; //class jcm/common/LogInfo$13
static final #60; //class jcm/common/LogInfo$14
static final #64; //class jcm/common/LogInfo$15
static final #68; //class jcm/common/LogInfo$16
static final #72; //class jcm/common/LogInfo$17
static final #76; //class jcm/common/LogInfo$18
static final #80; //class jcm/common/LogInfo$19
static final #84; //class jcm/common/LogInfo$20
minor version: 0
major version: 49
flags: ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT, ACC_ENUM
。。。。。。

信息可能很多,看不到前面的信息。可以用命令:javap -verbose classname >文本文件名.txt ,把信息写入文件。从上面信息可以查看版本信息

minor version: 0
major version: 49

查看JDK版本对应关系:

34(对应十进制的50):JDK1.8

33(对应十进制的50):JDK1.7

32(对应十进制的50):JDK1.6

31(对应十进制的49):JDK1.5

30(对应十进制的48):JDK1.4

2F(对应十进制的47):JDK1.3

2E(对应十进制的46):JDK1.2

可以看出,项目的编译版本是1.5,打补丁根据对应的版本编译就不会有问题了。

java.lang.UnsupportedClassVersionError:JDK版本不一致报错的更多相关文章

  1. 【java.lang.UnsupportedClassVersionError】版本不一致出错

    这种错误的全部报错信息: java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported ...

  2. maven与jdk版本不一致报:Unsupported major.minor version 51.0

    I recently uninstalled Java 8, to use Java 6 as I want my code/creations to be usable by more people ...

  3. Caused by: java.lang.NoClassDefFoundError: javax/jms/Message报错

    Caused by: java.lang.NoClassDefFoundError: javax/jms/Message at java.lang.Class.getDeclaredMethods0( ...

  4. 定时器中实现数据库表数据移动的功能,Exception in thread "Timer-0" isExist java.lang.NullPointerException定时器中线程报错。

    package com.shawnway.trade.marketdata.constants; import java.sql.SQLException; import java.util.Cale ...

  5. 解决 java.lang.ClassNotFoundException: javax.servlet.ServletContext报错

    原因:tomcat找不到servlet,即缺少了servlet-api.jar包 解决方法: 我的项目是用maven搭建的 在pom.xml中加入依赖 <dependency> <g ...

  6. Spring + MyBaits java.lang.reflect.InvocationTargetException 启动日志报错

    调试发现 实例化 class org.apache.ibatis.logging.slf4j.Slf4jImpl时发生异常,所以 slf4j jar 问题解决: http://www.cnblogs. ...

  7. 解决 java.lang.UnsupportedClassVersionError小记

    解决 java.lang.UnsupportedClassVersionError 错误原因是:编译的 class 文件的 jdk版本和运行这个 class 文件的jdk 版本不一致 比如:服务器运行 ...

  8. MyEclipse配置tomcat报错 - java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported major.minor version 51.0

    1 开发Servlet程序时,MyEclipse配置好tomcat与JDK之后,启动时控制台报下列错误: 1 java.lang.UnsupportedClassVersionError: org/a ...

  9. 代码编译时JDK版本和运行时JDK版本不一致启动项目报错

    java编译: java编译就是.java文件变成.class文件的过程,这个过程一般在我们常用的编译器中进行,例如Ecliplse和IDEA等:下面以IDEA举例: 执行上述编译使用的JDK版本就是 ...

随机推荐

  1. 谈谈我对Ext的认识,元芳,你怎么看

    实用Ext第一步当然是引用jar包啦. 下载地址 在页面上加上div用于显示这也是必须的 <div id='loginpanel' ></div> 在js中我们肯定需要将Ext ...

  2. Appium+python自动化(三十)- 实现代码与数据分离 - 数据配置-yaml(超详解)

    简介 本篇文章主要介绍了python中yaml配置文件模块的使用让其完成数据和代码的分离,宏哥觉得挺不错的,于是就义无反顾地分享给大家,也给大家做个参考.一起跟随宏哥过来看看吧. 思考问题 前面我们配 ...

  3. 弃用 wget, 拥抱多线程下载 axel

    0x00 事件 对于在 Linux 的下载工具而言,比较常用的就是 wget 或者 curl,吾也一直用 wget 的方式进行网络上的资源下载.偶然发现了 axel 这个支持多线程的下载工具,试用了几 ...

  4. 浏览器DOM渲染及阻塞问题

    在准备面试,然后复习到了计网的知识点,紧接着又扯到了url从输入到浏览器渲染的那个问题,这里来顺便完善补充一下,本文的重点在渲染 上面的图就是浏览器从服务器请求来页面后渲染的全过程 这里我们分开来看: ...

  5. 小白系统篇-windows 系统安装

    现阶段装系统的方法基本有几种1.硬盘安装2.光驱安装3.PE(u盘即可)安装 现在比较主流方便的用pe安装,所以我们这边就说一下PE安装系统的方法 首先我们了解下系统镜像,也就是你装系统所需得到文件( ...

  6. 亲,麻烦给个五星好评!—RatingBar

    引言 上一篇的CheckBox已经让大家越来越接近实战演练了,本章我们继续分享干货给大家,今天介绍一个实用的UI控件RatingBar(星级评分条),对于使用过电商APP(某东,某宝等)的小伙伴们来说 ...

  7. d3.js V5版本在vue里使用 自定义节点图片

    var width = this.$refs.topInfo.offsetWidth; var height = this.$refs.topInfo.offsetHeight; var img_w ...

  8. Java 从入门到进阶之路(四)

    之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的 ...

  9. Docker学习总结(三)--常用命令

    镜像相关命令 查看镜像 docker images 返回列表字段含义如下: 字段名称 字段含义 REPOSITORY 镜像名称 TAG 镜像标签 IMAGE ID 镜像 ID CREATED 镜像创建 ...

  10. mybatis 源码分析(六)StatementHandler 主体结构分析

    分析到这里的时候,mybatis 初始化.接口.事务.缓存等主要功能都已经讲完了,现在就还剩下 StatementHandler 这个真正干活的家伙没有分析了:所以接下来的博客内容主要和数据库的关系比 ...