此问题不是java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder的重复。
[我正在尝试将我的应用程序中的Java版本(更新为11),并且我的应用程序中的一个库使用sun.misc.BASE64Encoder
类,所以我不可避免地会遇到此异常:
Caused by: java.lang.ClassNotFoundException: sun.misc.BASE64Encoder
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
现在,解决方法将是使用java.util.Base64
或Apache Commons作为其他答案。但是,问题是,该库属于第三方,我没有源代码。似乎没有一个不使用这些类的新版本。因此,要解决此问题,我做了以下工作:
sun.misc
BASE64Encoder
和CharacterEncoder
类但是现在,我收到一个编译错误,说The package sun.misc conflicts with a package accessible from another module: jdk.unsupported
。
有什么办法可以解决此错误?如果不是,是否可以向包含这些类的依赖项中添加jar
?我只是想确保这些类在运行时可用于该第三方库(通过我自己的源代码或通过将这些类捆绑在其中的jar)。
对此的一种可能的解决方案是使用--patch-module
自变量(如果您灵活地更改命令行)。您将需要在其中创建两个类文件BASE64Encoder.class
和CharacterEncoder.class
的JAR:
base64.jar
sun
misc
BASE64Encoder.class
CharacterEncoder.class
然后您可以使用以下选项运行应用程序:
java --patch-module jdk.unsupported=base64.jar ...
[--patch-module
将使用两个新类扩展jdk.unsupported
模块,因此您现在可以在运行时使用它们。