簡體   English   中英

在沒有模塊的情況下訪問 JDK 11 中的“sun.security.x509”?

[英]Access `sun.security.x509` in JDK 11 without modules?

(tl,dr 最后)我們有一個生成自簽名 SSL 證書的小方法,它顯然取決於sun.security.x509 目前我們仍在使用 JDK8 構建它,盡管代碼庫的 rest(它只是一個小型的單個庫)是使用 JDK11 構建並使用 JVM11 運行的。

不幸的是,在主 JDK 中沒有替換,根據(並且CertificateFactory幾乎沒有生成證書,這與它的 javadoc 狀態相反......):

一種選擇是使用 BouncyCastle,但那是我們真正不需要的額外 4MB,尤其是對於這么小的任務,所以我在思考訪問它的方法

據我所見,package 和所需的類仍然是 package 並且相關類仍然存在(參見sun.security.x509 on github

[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並且它有點工作 - 我只收到WARNING ,而不是關於sun.security.x509 package:

[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模塊添加到導出但沒有太大成功。 似乎我還必須將此庫及其對模塊系統的依賴項都轉換為模塊系統,這並不是真正需要的。

這個問題與如何僅使用 JDK 支持的類生成自簽名證書有些相關?


tl,博士; 有沒有辦法在沒有模塊系統的 JDK 11 下使用sun.security.x509 package 編譯庫? 一些簡單的開關?

可能需要注意的是,由較新的 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>

要在 gradle 中包含sun.security.[somePackage]類,您可以添加:

tasks.withType(AbstractCompile) {
    options.compilerArgs += ["--add-exports", "java.base/sun.security.util=ALL-UNNAMED"]
    options.compilerArgs += ["--add-exports", "java.base/sun.security.pkcs=ALL-UNNAMED"]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM