java.lang.NoSuchMethodError的一般解决思路

  • Post author:
  • Post category:java


今天在测试一个web项目时遇到一个问题:

java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString,经过一番折腾终于解决,将解决思路梳理如下:

java.lang.NoSuchMethodError其实是java项目最常见的问题之一,一般是由于引用的jar包版本过低引起的。比如Ajar依赖Djar1.0,Bjar依赖Djar1.1,我们如果在pom.xml文件中将Bjar中的Djar1.1排除,使用Ajar引入的Djar1.0,那么如果Bjar中恰好使用了Djar1.1添加的新方法,那么在项目运行时就会大概率出现java.lang.NoSuchMethodError错误。遇到这个错误之后:

1、先确定是哪一个jar包中的哪一个方法缺失,比如我这里遇到的是org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString方法缺失,经过百度/google发现这个方法应该是存在于commons-codec-xx.jar中;

2、在项目的“External Library”中可以搜索到这个jar,发现当前使用的是commons-codec-1.3.jar版本,然后可以点进目录,到org.apache.commons.codec.binary.Base64这个类中发现1.3版本是没有encodeBase64URLSafeString方法的;

3、在terminal中执行:mvn dependency:tree 查看这个间接jar是由哪个直接依赖引入;

4、在maven仓库中搜索这个jar包,发现最新已经到1.11版本了,可以选择一个比较高的版本,比如1.8;

5、修改pom.xml文件,在commons-codec-1.3.jar的直接依赖中排除commons-codec:

<exclusions>
        <exclusion>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
        </exclusion>
</exclusions>

重新添加1.8版本依赖:

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.8</version>
        </dependency>

6、打包重新部署,解决问题。



版权声明:本文为u013468917原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。