java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String() in Java EE application

2022-09-01 02:24:24

我正在开发一个Java EE应用程序,其中我需要Base64编码/解码

所以我在我的应用程序文件夹中添加了并使用commons-codec-1.5.jarWEB-INF/lib

import org.apache.commons.codec.binary.Base64;

在 Java 文件中。

在编译时,当我键入 时,它显示方法可用。但是在运行时,它会引发如下异常:Base64encodeBase64String

java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String

我在构建路径中有JAR,但我仍然不明白为什么它会给我带来上述错误。


答案 1

这种方法在Commons Codec 1.4中引入。此异常表示您在 Web 应用的运行时类路径中的其他位置有较旧版本的 Commons 编解码器,该路径在类加载中具有优先权。检查 Web 应用的运行时类路径覆盖的所有路径。这包括 、 和 。最后删除或升级有问题的旧版本。Webapp/WEB-INF/libYourAppServer/libJRE/libJRE/lib/ext


更新:根据评论,您似乎找不到它。我只能建议使用较新的方法对代码进行注释,然后将以下行放在适当的位置:

System.out.println(Base64.class.getProtectionDomain().getCodeSource().getLocation());

这应该打印运行时加载它的JAR文件的绝对路径。


更新2:这似乎指向正确的文件。对不起,我现在无法再解释您的问题了。我所能建议的就是使用一种不同的方法,比如自己构建一个。或者,您可以删除该库并使用其他 Base64 编码器,例如这个编码器。Base64encodeBase64(byte[])new String(bytes)


答案 2

一些谷歌工具,如GWT,有一个嵌入式版本的commons-codec,带有1.4之前的Base64类。您可能需要通过重构项目,使代码无法访问此类工具 JAR,以便只有需要该工具的代码部分才能看到依赖项。


推荐