首页 > 其他分享 >NoClassDefFoundError的两种情况

NoClassDefFoundError的两种情况

时间:2023-01-12 12:55:38浏览次数:67  
标签:definition ClassNotFoundException 两种 项目 NoClassDefFoundError 情景 vs 情况

ClassNotFoundException vs. NoClassDefFoundError

ClassNotFoundException

关于ClassNotFoundException发生的原因,这篇文章ClassNotFoundException vs. NoClassDefFoundError写得很清晰。

总的来说就是:

  • 需要加载的类在classpath中找不到,一般这种情况都是使用类似Class.forName("oracle.jdbc.driver.OracleDriver")的方式获取类不存在

解决问题的思路:

  • 排查导入的jar包,对于使用maven的程序来说,就是去检查pom.xml中的配置
  • 如果配置的有的话就去看一下maven实际导入的jar包中,对应路径下是否有这个类

NoClassDefFoundError

关于ClassNotFoundException发生的原因,这篇文章ClassNotFoundException vs. NoClassDefFoundError写得很清晰。

总的来说就是:

  • 这个类编译时有,但是运行时没有

解决问题的思路:

  • 缩小范围,确定是哪个类的definition找不到。确定原因后再定解决办法

以下我演示两个NoClassDefFoundError的情景。

NoClassDefFoundError的情景

情景1.

B项目依赖了A项目,并配置<optional>为true。

<dependency>
    <groupId>com.example</groupId>
    <artifactId>a</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <optional>true</optional>
</dependency>

C项目依赖了B项目,并调用B项目中的某个方法,该方法调用了A项目的代码。

此时会发生NoClassDefFoundError报错。

情景2.

  • B项目依赖了A项目
  • C项目依赖了B项目
  • C项目也依赖了A项目

C项目调用B项目中的某个方法,该方法调用了A项目xxx类的代码。

正常来说这个过程是没问题的,但是B项目、C项目使用的A项目版本不同。
A项目xxx类在这两个版本的包路径不同。

这个是我用hutool的过程中发现的一个问题,NetUtil在项目不同版本中包位置不一样。

Note.
需要注意的一点是,如上两个情景,虽然都是因为少了A项目的代码,所以一般堆栈信息会直接报错是找不到A项目某个类的definition。
但如果使用A项目的代码是在B项目的static块中(<cinit>方法执行失败),那么此时会报的是找不到B项目这个类的definition。

标签:definition,ClassNotFoundException,两种,项目,NoClassDefFoundError,情景,vs,情况
From: https://www.cnblogs.com/daheww/p/17046322.html

相关文章

  • SEO初学者:10步优化你的网站(上)seo网站情况查询
    昨天给大家介绍了seo的意义和重要性,今天让我们一起看看10个基本的SEO初学者技巧,如何优化网站以增加流量。1. 研究关键词并使用尾词关键词在SEO中起着重要的作用。关键字表......
  • 复旦大学2022--2023学年第一学期高等代数I期末考试情况分析
    一、期末考试成绩班级前十名的同学祁振宁(100)、张家溢(90)、李燊旭(90)、马琪旻(90)、秦保睿(90)、肖竣严(90)、盖括(90)、潘飞越(90)、孙珺阳(89)、洪昕(89)、林鑫(89)......
  • maven 使用本地包的两种方式
    一般使用一些已经下来的好的lib需要使用maven统一管理方式一pom文件增加依赖<dependency><groupId>org.pentaho</groupId><artifactId>pentaho-encrypti......
  • 关掉小程序控制台的索引情况提示
    "description":"项目配置文件。","setting":{"urlCheck":true,"es6":true,"postcss":true,"minified":true,"newFeature":true,"checkSiteM......
  • KingbaseES date 数据类型的两种格式
    关于date数据类型,Oracle与PostgreSQL格式是不同的,Oracle是日期+时间的类型,而PG则只有日期。KingbaseESOracle模式则同时实现了二者类型,用户在使用时,需要注意所......
  • 实现表单引擎设计常用的两种设计方案 优劣势比较
    什么是表单引擎表单引擎是为快速实施项目研发的轻量级表单设计工具。采用表单引擎工具可在不开发和新增加代码的情况下设计出新表单样式,同比程序开发可省掉程序员差不多70......
  • SpringDataJPA 程序未配置乐观锁的情况下,报了乐观锁异常
    目录问题原因复现附:报错日志问题报错日志:详见文章结尾附:报错日志程序ORM框架使用的SpringDataJPA,程序中未配置@Version或者@OptimisticLocking注解,但是报了一个乐观......
  • 树的直径的两种求法
    树的直径:给定一颗树,树的每条边都有一个权值,树中任意两点都有一条唯一路径,路径长度为连接两点的路径上的边权之和,路径长度最长的一条为树的直径,往往说的直径既可以指路径......
  • 纯前端table表格导出excel文件,两种方法
    先介绍第一种,因为第一种是直接获取dom节点的数据,可以直接快照形式捕获数据(比如获取过滤后或者格式化后的数据)注意:依赖的版本,太高的话会报undefinedimportFileSaverfr......
  • 【css】元素垂直水平居中的几种情况
    写页面时免不了垂直居中、水平居中。在这里给出一些解决办法。原理:父元素 position:relative;保证子元素不脱离父元素子元素position:absolute;子元素相对于父元......