问题:

     项目在本地没有报错,在服务器部署的时候报java.lang.NoClassDefFoundError异常。

     发生此问题的时候,在本地的开发工具也会有此异常的警告(开发工具没有关闭警告提示)。     


原因:

       1.JVM编译时能找到合适的类,运行时不能找到导致错误。例如运行时调用某个类的方法或者访问这个类的静态成员的时,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。

       与ClassNotFoundException的不同在于:此错误发生在运行时需要加载对应的类不成功,而不是编译时发生。很多Java开发者很容易在这里把这两个错误搞混。

      总结:NoClassDefFoundError发生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用导致的错误

解决方案:

 

      1.maven项目:检查项目中的jar包是否和编译时的jar包一样(版本是否一致),下载相关jar包。

      2.非maven项目:检查项目中的jar包是否和编译时的jar包一样(版本是否一致),非maven项目的jar不会自动下载,需手动下载;若存在多个项目之间互相调用时,确保每个项目中都有相关的jar包,尤其是在不使用maven控制的微服务项目中常发生。
         

相关知识点:

      1.JVM加载;

      2.maven,微服务;

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐