Анализ
Опция --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, проблема исчезнет.
Игнорировать
Вы делаете правильные вещи, и через несколько месяцев все уладится, так что продолжайте и игнорируйте предупреждение. :)