gpt4 book ai didi

java - 在没有模块的情况下访问 JDK 11 中的 `sun.security.x509`?

转载 作者:行者123 更新时间:2023-12-01 14:32:38 26 4
gpt4 key购买 nike

(TL,博士在最后)
我们有一个生成自签名 SSL 证书的小方法,它显然取决于 sun.security.x509 .因此,目前我们仍在使用 JDK8 构建它,尽管其余代码库(它只是一个小型的单一库)是使用 JDK11 构建并使用 JVM11 运行的。

不幸的是,在主 JDK 中没有替换,根据(和 CertificateFactory 几乎没有生成证书,这与它的 javadoc 状态相反......):

  • https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8165481
  • https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8058778

  • 一种选择是使用 BouncyCaSTLe,但那是我们真正不需要的额外 4MB,尤其是对于这么小的任务,所以我在思考访问它的方法

    从我看到的情况来看,包和所需的类仍然是包并且相关的类仍然存在(参见 sun.security.x509 on github 但是在构建它时(使用 maven)我得到错误:
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project: Compilation failure: Compilation failure:
    [ERROR] OldSelfSignedCertificateGenerator.java:[20,25] package sun.security.x509 does not exist
    [ERROR] OldSelfSignedCertificateGenerator.java:[71,45] cannot find symbol
    [ERROR] symbol: class X509CertInfo
    [ERROR] location: class OldSelfSignedCertificateGenerator

    我搜索了一下并添加:
    <arg>--add-exports</arg><arg>java.base/sun.security.x509=ALL-UNNAMED</arg>

    maven-compiler-plugin它有点工作 - 我只得到 WARNINGsun.security.x509 无关包裹:
    [WARNING] OldSelfSignedCertificateGenerator.java:[20,25] sun.security.x509.AlgorithmId is internal proprietary API and may be removed in a future release

    但!现在看来我进入了(不情愿地!)模块系统,它提示访问其他基本 Java 类(以及我们的另一个依赖项):
    [ERROR] CertificateUtil.java:[35,17] package java.util.logging is not visible
    (package java.util.logging is declared in module java.logging, but module java.base does not read it)

    我尝试添加 java.logging模块以相同的方式导出,但没有多大成功。似乎我还必须将这个库及其对模块系统的依赖项都转换为模块系统,这并不是真正需要的。

    这个问题与 How to generate a self-signed certificate using only JDK supported classes? 有点相关。

    tl,博士;
    有没有办法使用 sun.security.x509 编译库没有模块系统的JDK 11下的包?一些简单的开关?

    最佳答案

    事实证明,这可能与由较新的 JDK(9+)版本生成的构建在 JDK8 下无法执行的事实有关:

    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    <source>9</source>
    <target>9</target>
    <release combine.self="override"></release>
    <compilerArgs>
    <arg>--add-exports</arg><arg>java.base/sun.security.x509=ALL-UNNAMED</arg>
    </compilerArgs>
    </configuration>
    </plugin>

    关于java - 在没有模块的情况下访问 JDK 11 中的 `sun.security.x509`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61149455/

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