尽量避免在生产环境中使用—add-opens参数,因为它可能会带来安全风险和兼容性问题。只在开发和测试环境中使用它,并确保你了解其潜在的影响。 如果可能的话,考虑使用其他方法来实现你的需求,而不是依赖—add-opens参数。例如,你可以尝试重构代码以避免反射访问内部APIs,或者使用其他库或框架来提供你需要的功能。 如果你...
--add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.base/java.time=ALL-UNNAMED --add-opens jav...
--add-opens 一些工具和库使用反射API(setAccessible(true))来尝试访问java.*API的非公共字段和方法。在JDK17上,默认情况下这是不可能的,但您可以使用命令行上的--add-opens选项为特定的工具和库启用它。--add opens的语法为:复制 --add-opens <module>/<package>=<target-module>(,<target-module>)*...
--add-exports=java.management/sun.management.counter.perf=ALL-UNNAMED --add-exports=jdk.management.agent/jdk.internal.agent=ALL-UNNAMED --add-exports=jdk.attach/sun.tools.attach=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED -Dsun...
api=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tool s.javac.code=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens=jdk...
--add-opens=java.base/java.lang=ALL-UNNAMED这个参数用于打开模块系统中java.base模块内java.lang包的访问权限,允许未命名模块(通常是那些没有声明属于任何模块的类路径上的类)访问这个包内的元素。这对于某些需要反射访问Java核心库内部细节的框架或工具是必要的。
这都是JDK基本模块的代码,因此,添加--add-opens=java.base/java.lang.invoke=ALL-UNNAMED即可。--add-opens可以使模块中的包对其他模块开放,这样就可以在运行期使用深层反射访问该程序包中的所有成员类型。 4 总结 因此解决的办法是添加如下两个JVM参数: ...
通过反射访问JDK模块内类的私有方法或属性,且当前模块并未开放指定类用于反射访问,就会出现以上告警。解决方式也必须使用模块化相关知识,可以使用遵循模块化之间的访问规则,也可以通过设置 –add-opens java.base/java.lang = ALL-UNNNAMED 破坏模块的封装性方式临时解决 ...
--add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.util=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED ...