модуль устарел и помечен для удаления - PullRequest
0 голосов
/ 29 июня 2018

Я добавил requires transitive java.activation к своему module-info.java, но java-10 выдает мне предупреждение компилятора module-info.java: module java.activation has been deprecated and marked for removal, несмотря на то, что я добавил зависимость от com.sun.activation:javax.activation:1.2.0 (Automatic-Module-Name: java.activation) в свой Maven pom.xml.

Я могу обойти это, добавив @SuppressWarnings("removal") к объявлению моего модуля, но мне никогда не нравится подавлять предупреждения, которые я мог бы исправить. Есть ли что-то еще, что я мог бы сделать, чтобы сообщить компилятору о моем намерении зависеть от стороннего jar, а не от встроенной / устаревшей версии этого модуля?

Большое спасибо!

1 Ответ

0 голосов
/ 29 июня 2018

Анализ

Опция --show-module-resolution помогает наблюдать такое поведение. Он доступен только для java, но не javac, но JPMS ведет себя одинаково в обоих случаях. Если вы запустите приложение с этой опцией и javax.activation-1.2.0.jar в пути к модулю, вы увидите следующую строку:

root $your-module file:///$your-jar requires java.activation jrt:/java.activation

Обратите внимание, что java.activation был извлечен из jrt:/java.activation, а не из JAR на пути к модулю. Система модулей предпочитает (к сожалению, молча) модуль платформы, а не модуль из пути к модулю, поэтому ваша не устаревшая версия не используется.

* Решения 1016 * Я вижу три разных решения вашей проблемы. Путь к модулю обновления JAR, который вы используете, является полной реализацией модуля платформы java.activation , и, следовательно, вы можете использовать JAR для замены модуля, поместив JAR в путь модуля обновления javac -d /home/nipa/code/Java-Activation/target/classes --upgrade-module-path ~/.m2/repository/com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar: -g --release 10 -encoding UTF-8 `find . -name *.java` Компилятор затем использует JAR для замены модуля платформы с тем же именем, и устаревание уходит. Поскольку вы обнаружили себя , вы можете настроить плагин компилятора с параметром командной строки: <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerArgs> <arg>--upgrade-module-path=${settings.localRepository}/com/sun/activation/javax.activation/${javax.activation.version}/javax.activation-${javax.activation.version}.jar</arg> </compilerArgs> </configuration> </plugin> </plugins> </build> Java 11 Модули JEE, такие как java.activation , были удалены из JDK 11, поэтому, если вы соберетесь против 11, проблема исчезнет. Игнорировать Вы делаете правильные вещи, и через несколько месяцев все уладится, так что продолжайте и игнорируйте предупреждение. :)

...