前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAR版本升级你所遇到的坑!!!

JAR版本升级你所遇到的坑!!!

作者头像
小柒2012
发布2018-04-13 14:45:17
1.5K0
发布2018-04-13 14:45:17
举报
文章被收录于专栏:IT笔记IT笔记

JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包。

然而,这家伙在2010年出了一个2.4版本就停更了,或许是太完美了,并不会出问题了吧。

123.png
123.png

但是要使程序可以运行必须引入一下JSON-lib包同时依赖的JAR包:

commons-lang.jar(坑在这里) commons-beanutils.jar commons-collections.jar commons-logging.jar ezmorph.jar 然而由于最近升级struts2,顺便也把commons-lang.jar 升级到了3。

尼玛悲剧发生了发生了,请求Action 中有这样一段代码

代码语言:javascript
复制
public String prepay(){
        try {
            JSONArray array = new JSONArray();
            //伪代码
            message="prepay";
        } catch (Exception e) {
            e.printStackTrace();
            message=Action.ERROR;
        }
        return message;
    }

居然没走catch 没打印错误,真实是RI了狗了,给个提示也是可以的啊。

折腾了半天,于是用main方法测试了一下,然后打印了一下错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at com.acts.web.pay.action.PayAction.main(PayAction.java:250)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 13 more

至于为什么在Action没有catch异常,很显然错误显示,那个异常类已经不见了,你去那里捕获???,不是Action不是catch,是它去catch谁的问题。

commons-lang版本3中居然把包名改成了 org.apache.commons.lang3,真尼玛,所以如果你想用JSON-lib 只能再加入 commons.lang。

具体原因: Apache Commons 团队发布了 Commons Lang 3.0 ,该版本完全支持 Java 5 的特性,例如泛型和可变参数,删除了废弃的 API 。因此该版本无法兼容以前的版本,包名也做了更改 org.apache.commons.lang3 。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档