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