第一次用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的配置,但由於我的環境本身就是
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- </dependency>
所以,不管用。
再加上在之前的項目使用buid path引用第三方jar包,是沒有任何問題的, 這是基本判斷是maven配置庫中沒有第三方jar包的原因,但因為真是不懂maven的機制,原理,用法,問了一下同事,在網上搜htmlparser.jar的maven源,拷貝的pom.xml中,同時刪除了原來build path添加進去的jar包,此時在maven中有了這個包,編譯、運行均通過,解決了相關問題。
但,最終還是不明白為什么,不懂的太多了,希望有大俠解惑!