Доступ к `sun.security.x509` в JDK 11 без модулей? - PullRequest
1 голос
/ 11 апреля 2020

(tl, dr в конце) У нас есть небольшой метод, который генерирует самоподписанный сертификат SSL, и он, очевидно, зависит от sun.security.x509. В настоящее время мы по-прежнему собираем его с использованием JDK8, хотя остальная часть кодовой базы (это всего лишь небольшая библиотека) собирается с использованием JDK11 и работает с JVM11.

К сожалению, в замене нет main JDK, согласно (и CertificateFactory практически не имеет ничего общего с генерированием сертификатов, в отличие от того, что это javado c состояний…):

Одним из вариантов будет использование BouncyCastle, но это дополнительные 4 МБ, которые нам действительно не нужны, особенно для такой небольшой задачи, поэтому я был обдумывая способы доступа к нему, пока

Из того, что я видел, пакет и требуемые классы все еще являются пакетными, и соответствующие классы все еще там (см. sun.security.x509 на 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, и это несколько сработало - я получаю только WARNING, не касаясь sun.security.x509 упаковка:

[WARNING] OldSelfSignedCertificateGenerator.java:[20,25] sun.security.x509.AlgorithmId is internal proprietary API and may be removed in a future release

НО! Сейчас кажется, что я вошел (неохотно!) в модульную систему и жалуется на доступ к другим, базовым c 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, dr; Есть ли способ скомпилировать библиотеку, используя пакет sun.security.x509 под JDK 11 без системы модулей? Какой-то простой переключатель?

1 Ответ

0 голосов
/ 14 апреля 2020

Оказывается, что возможно сделать с предупреждением, что сборка, произведенная более новым 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>
...