java.lang.NoSuchMethodError的通用解决思路

        NoSuchMethodError中文意思是没有找到方法,这个错误并不是说依赖的jar包、方法不存在,ClassNotFoundException才是上述错误,即便出现ClassNotFoundException也不一定全是缺少依赖的jar包、class,有可能是依赖的冲突(引用了多次报错Class的jar)

  同样道理,NoSuchMethodError经常是因为报错的方法所在的jar包产生了冲突。

  明白了为什么会出现这个错误后,我们关键说下 Maven项目出现这个问题了怎么解决。

比如之一个 Spring Boot 项目,需要用到阿里dubbo jar包中的方法,引入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.5.3</version>
</dependency>
项目无法启动,报错为: Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationAwareOrderComparator.sort(Ljava/util/List;)V

Ctrl+左键点入dubbo这个依赖,发现dubbo也依赖Spring,而且和我项目中的Spring版本并不一样,所以就产生了冲突,解决方法就是让dubbo依赖的Spring不再添加进项目的依赖,如下:
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.5.3</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
        </exclusion>
    </exclusions>
</dependency>

在引入dubbo时,排除其中依赖的spring,默认使用项目中的spring,就可以正常启动了。

还可以安装idea插件Maven Helper,帮助你筛选项目中有冲突依赖的地方,快速定位问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值