分析
选项–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.模块系统优先(不幸的是静默地)将平台模块放在模块路径上,这就是不使用未弃用版本的原因.
解决方案
我看到了三个不同的解决方案.
升级模块路径
您正在使用的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替换同名的平台模块,并且弃用将消失.
maven-compiler-plugin
--upgrade-module-path=${settings.localRepository}/com/sun/activation/javax.activation/${javax.activation.version}/javax.activation-${javax.activation.version}.jar
Java 11
JEE模块(如java.activation)已从JDK 11中删除,因此如果您构建为11,则问题就会消失.
忽略它
你正在做正确的事情,它将在几个月后自行解决,所以继续并忽略警告. 🙂