![](/img/trans.png)
[英]How can I resolve “sun.security.x509” is not visible when migrating from 1.8 to openJDK11?
[英]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.