关于maven项目中java.lang.NoClassDefFoundError的问题处理

第一次用maven配置库,在做网络爬虫时,引用了第三方工具包htmlparser.jar,一直用main方法开发调试,当把部署到tomcat中时,启动报java.lang.NoClassDefFoundError,开始以为时jar包冲突,因为在htmllexer.jar包中也有一个相同的类,在build path中将htmllexer.jar去掉后,仍然报错,在tomcat发布后的lib中也没有引用的jar包,在网上找了好多文章。

其中http://blog.csdn.net/jamesjxin/article/details/46606307 中介绍了NoClassDefFoundError错误发生的原因,并介绍了java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误的区别,提到了类加载机制。
另一篇文章http://vipcowrie.iteye.com/blog/1562251 中根据class加载的双亲委托机制来阐述了该错误发生的原因。

还有 http://blog.csdn.net/qqhjqs/article/details/51491516 中提到了pom.xml配置文件commons-lang的配置,但由于我的环境本身就是

  1. <dependency>  
  2.             <groupId>commons-lang</groupId>  
  3.             <artifactId>commons-lang</artifactId>  
  4. </dependency>

所以,不管用。

再加上在之前的项目使用buid path引用第三方jar包,是没有任何问题的, 这是基本判断是maven配置库中没有第三方jar包的原因,但因为真是不懂maven的机制,原理,用法,问了一下同事,在网上搜htmlparser.jar的maven源,拷贝的pom.xml中,同时删除了原来build path添加进去的jar包,此时在maven中有了这个包,编译、运行均通过,解决了相关问题。

但,最终还是不明白为什么,不懂的太多了,希望有大侠解惑!

原文地址:https://www.cnblogs.com/gugunan/p/8067854.html