0

我试图看看为什么我会收到“警告:发生了非法反射访问操作”我想在此之前摆脱那些警告我想检查它在我的代码中实际发生的位置。因为我读过

“对任何此类包的第一次反射访问操作会导致发出警告,但在那之后不会发出警告。这个单一警告描述了如何启用进一步的警告。这个警告​​不能被抑制。”

所以要得到进一步的警告

所以我在 IntelliJ 中提到了 --illegal-access=deny 和 --add-exports 选项。

<option name="ADDITIONAL_OPTIONS_OVERRIDE">
  <module name="XXX" options="--illegal-access=deny --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED" />
</option>

然后我得到了 Error:java: error: invalid flag: --illegal-access=deny

这些是警告

WARNING: Illegal reflective access by com.thoughtworks.xstream.core.util.Fields (file:xxx/xxx/xxx/xstream-1.4.10.jar) to field java.util.TreeMap.comparator 
WARNING: Please consider reporting this to the maintainers of com.thoughtworks.xstream.core.util.Fields 
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
4

1 回答 1

3

反射访问发生在运行时,因此无法在编译时检测到它。如果您想摆脱警告,可以将命令行选项添加--add-opens到您的运行配置:

--add-opens=java.base/sun.net.www.protocol.http=ALL-UNNAMED

--add-opens使包sun.net.www.protocol.http在运行时可访问而没有警告。

但是,我建议不要使用此选项,而是找出这种非法反射访问发生的原因并尝试消除它。

于 2019-01-22T08:20:30.433 回答