vip*_*vip 29 java command-line-arguments java-platform-module-system java-9 java-module
由于新的模块系统,Java 9(jdk-9 + 170)默认情况下不允许应用程序查看JDK中的所有类,这与以前的所有Java版本不同.
要解决此问题,java命令行会提供一个新参数--add-exports,允许按如下方式中断封装:
java -jar josm.jar --add-exports java.base/sun.security.util=ALL-UNNAMED --add-exports java.base/sun.security.x509=ALL-UNNAMED
这在JEP 261中得到了很好的解释.
我已经阅读了--add-opens使用相同语法的类似选项,但是JEP 261尚未更新来描述它(最后更新:2017/03/08 13:58).
这两个选项有什么区别?
编辑:JEP 261已在2017-09-22更新以解释它.
Nic*_*lai 40
--add-exports包装出口,这意味着所有的公共类型和成员在其中在编译和运行时访问.--add-opens包装被打开,这意味着所有类型和成员(不仅是公立!)其中是在运行时使用.因此,运行时的主要区别在于--add-opens允许"深度反思",即非公共成员的访问.您通常可以通过调用的反映代码来识别此类访问setAccessible(true).