java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException问题解决

在做一个String转JsonObject的过程中,报了一个很恶心的错误:

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:760)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at com.xf.test.TestJson.main(TestJson.java:8)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 13 more

大概意思是说,需要导包org.apache.commons.lang,我检查了下,我导入的包是org.apache.commons.lang3,lang和lang3有什么区别呢?
lang3是Apache Commons 团队发布的工具包,要求jdk版本在1.5以上,相对于lang来说完全支持java5的特性,废除了一些旧的API,但是该版本无法兼容旧有版本,于是为了避免冲突改名为lang3,所以如果需要使用旧有特性,需要引入lang(建议lang和lang3一起引入,省得麻烦)。

引入lang以后,又报了如下错误java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher:

Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher
	at com.xf.test.TestJson.main(TestJson.java:8)
Caused by: java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 1 more

查了资料才知道,使用JSON,在SERVLET或者STRUTS的ACTION中取数据时候,如果出现异常:java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher,原因是少了JAR包,造成类找不到,除了要导入JSON网站上面下载的json-lib.jar包之外,还必须有其它几个依赖包:

commons-beanutils.jar

commons-httpclient.jar

commons-lang.jar

ezmorph.jar

morph-1.0.1.jar(该包不导入好像也没问题)

这个问题之前也遇到过,但是每次都少这个包或那个包,仅此记录下,避免再次遗忘:

public class TestJson {
	public static void main(String[] args) {
		String str = "{\"status\":0,\"result\":{\"location\":{\"lng\":116.32955083057994,\"lat\":39.971617532034439},\"formatted_address\":\"北京市海淀区南大街2号\",\"business\":\"人民大学,双安,双榆树\",\"addressComponent\":{\"country\":\"中国\",\"country_code\":0,\"country_code_iso\":\"CHN\",\"country_code_iso2\":\"CN\",\"province\":\"北京市\",\"city\":\"北京市\",\"city_level\":2,\"district\":\"海淀区\",\"town\":\"\",\"town_code\":\"\",\"adcode\":\"110108\",\"street\":\"南大街\",\"street_number\":\"2号\",\"direction\":\"附近\",\"distance\":\"11\"},\"pois\":[],\"roads\":[],\"poiRegions\":[{\"direction_desc\":\"内\",\"name\":\"数码大厦\",\"tag\":\"房地产;写字楼\",\"uid\":\"3dd9b965c5cc64b3c8213d50\",\"distance\":\"0\"}],\"sematic_description\":\"数码大厦内,华宇时尚购物中心西北66米\",\"cityCode\":131}}";
		JSONObject json = JSONObject.fromObject(str);
		System.out.println(json);
	}
}
扫描二维码关注公众号,回复: 8495467 查看本文章
发布了185 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39309402/article/details/103234661