java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter. <init>(Z)V

本文介绍了解决cglib与asm包冲突的方法,通过更换cglib版本从2.1.3到2.2,成功避免了NoSuchMethodError错误。同时介绍了cglib的基本用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter. <init>(Z)V 

       原因是因为cglib 包和asm包冲突,开始用的cglib包是cglib-2.1.3.jar  ,后来换了一个cglib-2.2.jar才测试通过,去cglib官网下个最新版本的 就解决了 


据cglib官网http://cglib.sourceforge.net/的summary介绍,cglib用来继承类或实现接口以产生对象。 
### 解决方案 `java.lang.NoSuchMethodError: org.yaml.snakeyaml.representer.Representer <init>()V not found` 错误通常是由于类的构造方法在依赖升级后发生了变化,而项目中仍然引用了旧版本的方法签名。以下是可能的解决方案: #### 1. 检查依赖冲突 确保项目中没有多个版本的 `snakeyaml` 依赖。可以使用以下命令检查依赖树: ```bash mvn dependency:tree ``` 如果发现多个版本的 `snakeyaml` 依赖,则需要通过 `<exclusions>` 排除旧版本[^3]。 #### 2. 确保正确版本的依赖 根据引用内容,`snakeyaml` 的新版本(如 2.2)可能导致构造方法的变化。因此,需要确认项目的其他依赖是否兼容新版本的 `snakeyaml`。例如,Spring Boot 可能自带了一个特定版本的 `snakeyaml`,升级时可能会导致不兼容[^3]。 可以在 `pom.xml` 中显式声明 `snakeyaml` 的版本: ```xml <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.2</version> </dependency> ``` #### 3. 修改代码以适配新构造方法 如果升级到新版本后,`Representer` 类的无参构造方法被移除或修改,则需要调整代码以适配新的构造方法。例如,在某些情况下,可以通过传递 `DumperOptions` 来初始化 `Representer`[^4]: ```java import org.yaml.snakeyaml.representer.Representer; import org.yaml.snakeyaml.DumperOptions; public class CustomRepresenter extends Representer { public CustomRepresenter() { super(new DumperOptions()); // 使用 DumperOptions 初始化 this.representers.put(null, new RepresentJavaBean()); } } ``` #### 4. 回退到兼容版本 如果无法解决上述问题,可以尝试回退到一个已知兼容的 `snakeyaml` 版本(如 1.29),并验证其是否能够正常工作[^2]。 #### 5. 检查 Spring Boot 的 BOM 如果项目是基于 Spring Boot 的,建议使用 Spring Boot 提供的 BOM(Bill of Materials)来管理依赖版本。这样可以确保所有依赖之间的兼容性[^3]: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` --- ### 注意事项 - 如果项目中有其他库间接依赖 `snakeyaml`,则需要检查这些库是否与新版本兼容。 - 在升级依赖时,务必阅读官方文档或变更日志,了解可能的破坏性更改[^4]。 --- ### 示例代码 以下是一个示例,展示如何在升级后适配新的构造方法: ```java import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.representer.Representer; public class CustomRepresenter extends Representer { public CustomRepresenter() { super(new DumperOptions()); // 使用 DumperOptions 初始化 this.representers.put(null, new RepresentJavaBean()); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值