gpt4 book ai didi

Java 11 : Patch sun. misc.BASE64Encoder

转载 作者:行者123 更新时间:2023-12-04 14:13:52 33 4
gpt4 key购买 nike

此问题与 java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder 不重复.

我正在尝试更新我的应用程序中的 Java 版本(到 11),我的应用程序中的一个库使用 sun.misc.BASE64Encoder类,所以我不可避免地得到这个异常(exception):

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
  • 已复制 BASE64EncoderCharacterEncoder此包中的类

  • 但是现在,我收到一个编译错误,提示 The package sun.misc conflicts with a package accessible from another module: jdk.unsupported .

    有什么办法可以解决这个错误吗?如果没有,我可以添加一个 jar到包含这些类的依赖项?我只是想确保这些类在运行时可用于该第三方库(通过我自己的源代码或通过捆绑这些类的 jar)。

    最佳答案

    一种可能的解决方案是您使用 --patch-module参数(如果您可以灵活地更改命令行)。您将需要创建一个包含两个类文件的 JAR BASE64Encoder.classCharacterEncoder.class里面:

    base64.jar
    sun
    misc
    BASE64Encoder.class
    CharacterEncoder.class

    然后您可以使用以下选项运行您的应用程序:
    java --patch-module jdk.unsupported=base64.jar ...
    --patch-module将增加 jdk.unsupported具有两个新类的模块,因此现在您可以在运行时使用它们。

    关于Java 11 : Patch sun. misc.BASE64Encoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62193303/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com