前言:
今天在拉新項目後啓動時出現如下異常:
java.lang.NoClassDefFoundError: org/apache/commons/lang/text/StrLookup
首先
先搞清楚java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError的主要區別
ClassNotFoundException | NoClassDefFoundError |
發生在JVM動態運行時 | 發生在編譯時 |
NoClassDefFoundError發生在JVM在動態運行時,根據你提供的類名,在classpath中找到對應的類進行加載,但當它找不到這個類時,就發生了java.lang.NoClassDefFoundError的錯誤,而ClassNotFoundException是在編譯的時候在classpath中找不到對應的類而發生的錯誤。ClassNotFoundException比NoClassDefFoundError容易解決,是因爲在編譯時我們就知道錯誤發生,並且完全是由於環境的問題導致。
而網上諸多方法均是說沒有commons-lang的pom依賴,沒有其他解決方式。如果是由於該原因的話,那麼在編譯工程就會報ClassNotFoundException異常而不是NoClassDefFoundError。
而後又懷疑是否是包衝突,導致在運行時想調用這個類的方法或者訪問這個類的靜態成員的時候不知道調用哪一個。排除後發現非此原因。
最後解壓出commons-lang-2.6.jar,發現其中的包路徑不是org\apache\commons\lang\,WTF?直接導致運行時使用該jar包下某個類時根據路徑找不到。出現這個的原因是在公司私倉這個包被替換咯,我又把它拉下來了。。。
最後把正確的jar包替換後成功解決。