intellij idea NoClassDefFoundError问题记录

问题

使用intellij idea,新建module,写入方法,设置新项目依赖以及其编译路径


image.png

旧工程中添加新工程依赖,编译无问题,运行调用新工程方法出现NoClassDefFoundError报错。


image.png

查询了报错问题NoClassDefFoundErro,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的不同在于,这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。

百度出很多解决此问题的方法,例如classpath设置、导入lib包找不到。都不是这个问题的根本原因,报错还是因为找不到编译后的类。尝试修改新工程的编译地址到旧项目的编译地址,class找到了。但是新工程引用的lib包报NoClassDefFoundError。那这个问题就好解决了啊,把新的lib包放入就工程的lib包里,果然,成功了。但是这种方式就不方便,所以选择设置Artifacts(编译后的Java类,Web资源等的整合,用以测试、部署等)去替代解决。

替代解决方法

file->project structure->Artifacts->+->JAR->From modules with dependencies


image.png

确定输出的目录,放入可以被读取的lib中


image.png

重新编译Rebulid Project,运行后成功

后续

只在此记录遇到的问题以及替代解决的方法。之前idea新建工程并没有出现过这个问题(而之前的工程这样设置依然没有问题),不知道为什么后面所有新建工程都有此问题,而且是编译没有问题运行就出错,像是idea 编译和运行的依赖目录不一样,可能是跟内嵌jetty运行目录有关系,后续如果明白其根本原因来更新

你可能感兴趣的:(intellij idea NoClassDefFoundError问题记录)