java.lang.NoMethodError:org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString

时间:2017-01-19 09:19:09

标签: java ant apache-commons apache-commons-codec

我在我的网络应用程序中收到以下异常:

 java.util.concurrent.ExecutionException: java.lang.NoSuchMethodError:     org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString([B)Ljava/lang/String;

在我的类路径中添加了commons-codec-1.5.jar。我正在使用Ant构建它并手动添加了依赖项。通过对同一问题的其他讨论,我发现添加此库的源代码可以解决问题,但这对我不起作用。我还读到有另一个具有相同类的库可能会导致冲突,并且可能该类可能没有此方法导致错误。但是,我已经仔细检查了同一个库没有其他版本。是否有可能其他库中有相同的类?如果是,那么我如何识别并解决问题?

1 个答案:

答案 0 :(得分:2)

正如您在问题中提到的那样,这是在编译时将Base64类的不同版本用于运行时拾取的版本时引起的。由于您使用的是Ant(而不是Maven),因此您应该更容易找到罪魁祸首,因为您不必担心传递依赖性。

要做的第一件事是使用IDE打开类Base64(IntelliJ中的ctrl + N),这将突出显示此类路径中有多少个不同版本的库。在我的情况下有2.如果你有多个,那么你就找到了你的罪魁祸首。

如果类路径上只有一个版本,那么这个类可以驻留的唯一其他位置是在Tomcat的lib目录中。您可能必须手动打开jar文件以查看是否包含相同的包org.apache.commons.codec.binary...