NoClassDefError


這個錯第一次看別看出了啊,不是ClassNotFoundException

一般出現都是編譯期正常,但是執行時候找不到對應類。

好了首先cause by:發現是ClassNotFoundException。找不到對應的類

趕緊檢查我的對應的類。對應的jar,對應的class文件,發現,沒啥問題。繼續。

百度嘍:

別人經驗的原因:

  

    1    JAR重復引入,版本不一致導至

    2 打程序版本時,沒有把關聯類打出去(這種情況一般是) java.lang.nosuchmethoderror 3 還有一種情況是A引用B時,B初始化失敗時也會導致以上的錯誤出現。 

首先我檢查我是否jar包沖突導致的,仔細檢查。我使用的方式是使用idea的圖,觀看是否存在沖突jar包,然后進行刪除。當真被我發現了一個jar包沖突,於是我將沖突解決了。重啟項目,還是老樣子。

繼續百度:

1、對應的Class在java的classpath中不可用
2、你可能用jar命令運行你的程序,但類並沒有在jar文件的manifest文件中的classpath屬性中定義
3、可能程序的啟動腳本覆蓋了原來的classpath環境變量
4、因為NoClassDefFoundError是java.lang.LinkageError的一個子類,所以可能由於程序依賴的原生的類庫不可用而導致
5、檢查日志文件中是否有java.lang.ExceptionInInitializerError這樣的錯誤,NoClassDefFoundError有可能是由於靜態初始化失敗導致的
6、如果你工作在J2EE的環境,有多個不同的類加載器,也可能導致NoClassDefFoundError

我報錯確實是靜態變量初始化失敗,但是我還是找不到原因所在。

 

后面我很懷疑,我不知道問題出在哪里。於是我寫測試方法,使用Junit的@Test方法執行,沒有問題。

我好疑惑。

我使用public static void main(String[] args)進行測試,繼續出現了哪個NoClassDefEror。我擦,不知道怎么找問題了。

 

實在沒辦法,我懷疑我沒有導入jar包。雖然我項目的libralies里面是全部有這些jar包的。

一下不小心進入了ArtifactId這里:

 

 好像我的依賴沒有引入war包。我的天,tomcat配置跑的是這個啊。

引入,搞定,沒問題了。

 

 

 

 

一臉懵逼,哇哇哇哇!

 

 

吸取教訓。跑項目一定要知道你跑的是什么代碼。注意,跑包與代碼是不一樣的。可以觀察下你的容器的配置。並且要相信日志,相信報錯文件。它們不會騙你的。

 

參考鏈接:

http://wolfdream.iteye.com/blog/1131558

http://blog.csdn.net/jamesjxin/article/details/46606307

 

一個造成NoClassDef的例子:

public class TestNoClassDefError {
    public static void main(String[] args){
        List<User> users = new ArrayList<User>(2);
        for(int i = 0; i < 2; i++){
            try{
                users.add(new User(String.valueOf(i)));
            }catch(Throwable t){
                t.printStackTrace();
            }
        }
    }
}
class User{
    private static String userId = getUserId();

    public User(String id){
        this.userId = id;
    }
    public static String getUserId(){
        throw new RuntimeException("UserId not found");
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM