【发布时间】:2026-01-04 19:45:01
【问题描述】:
我正在尝试将我的代码库升级到 Java 11。不幸的是,我的代码依赖于内部使用 sun.misc.BASE64Encoder 和 Decoder 的第三方库。由于 sun.misc 包已从 Java 11 JRE 中删除,因此它失败了。该库的所有者尚未替换该依赖项,因此我坚持了一段时间。
如果我可以控制代码,我会使用 java.util.BASE64 类,但正如我所说,这些是作为来自另一个库的传递依赖项进来的,我无法更改。
我想我会很聪明,用这些类创建一个新的 jar,但由于某种原因,这个 jar 被忽略了。
<dependency>
<groupId>sun.misc</groupId>
<artifactId>BASE64</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/sun.jar</systemPath>
</dependency>
我也尝试将它显式添加到类路径中,但仍然没有成功
这是 JRE 阻止您使用的那些包之一,还是我缺少某些模块规范,或者这是一个显示停止器?
这是输出
java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder
at com.propsco.util.support.PropsLoader.save(PropsLoader.java:478) ~[props-client-2.2.1.jar:na]
【问题讨论】:
-
请解释一下“但是由于某种原因,那个 jar 被忽略了。” 您的应用程序是模块化应用程序吗?
BASE64Encoder/Decoder出现什么错误? -
你能再具体一点吗?您在日志中看到 NoClassDefFoundError 了吗?您可以将堆栈跟踪附加到问题吗?
-
是的@ZhekaKozlov,我添加了输出
-
您是否尝试将其添加到系统库中?现在在“JAVA_HOME/jmods”中。
-
好吧,这可能与 jdk.unsupported.jmod 模块中的 noew 选项
--patch-modulesee *.com/questions/48148607/… sun/misc 有关。 cli 上的参数可能类似于--patch-module modulename=yourmodule.jmod