Java 使用MethodHandles远程运行单元测试时出现意外异常
测试中的以下代码行Java 使用MethodHandles远程运行单元测试时出现意外异常,java,maven,reflection,Java,Maven,Reflection,测试中的以下代码行 var lookup = MethodHandles.privateLookupIn(Field.class, MethodHandles.lookup()); 其中字段是java.lang.reflect.Field 抛出 如果测试在本地运行(通过IDE或maven生命周期),那么代码可以正常工作,但在远程主机上的CI管道上的maven测试运行失败 Maven是为Java11配置的,但是我们在日志中看到的测试执行是使用openjdk-16JVM的 如果您有任何关于查找位置
var lookup = MethodHandles.privateLookupIn(Field.class, MethodHandles.lookup());
其中字段是java.lang.reflect.Field
抛出
如果测试在本地运行(通过IDE或maven生命周期),那么代码可以正常工作,但在远程主机上的CI管道上的maven测试运行失败
Maven是为Java11配置的,但是我们在日志中看到的测试执行是使用openjdk-16JVM的
如果您有任何关于查找位置的想法,我们将不胜感激。Java16将默认值
--非法访问
更改为拒绝
。请看@JohannesKuhn,在这种情况下,什么是最合适的修复/解决方法?不要做这样的事情?我真的很喜欢这样一句话:“这意味着JDK的所有内部元素都将被严格封装,除了关键的内部API,如sun.misc.Unsafe。”这意味着,我们终于让这个房子安全了,但一如既往,别忘了把总钥匙放在门垫下面。
java.lang.IllegalAccessException: module java.base does not open java.lang.reflect to unnamed module @497470ed
at java.lang.invoke.MethodHandles.privateLookupIn(MethodHandles.java:260) ~[?:?]