При использовании параметра --illegal-access=deny в параметрах компиляции в Java 11 появляется сообщение об ошибке "Недопустимый флаг".
Я пытаюсь понять, почему у меня появляется сообщение "ПРЕДУПРЕЖДЕНИЕ. Произошла недопустимая операция доступа с отражением". Я хочу избавиться от этих предупреждений, прежде чем сначала я хочу проверить, каким образом это может происходить в моем коде. Я прочитал это
"Первая операция отражающего доступа к любому такому пакету вызывает предупреждение, но после этого предупреждения не выдаются. Это единственное предупреждение описывает, как включить дополнительные предупреждения. Это предупреждение не может быть подавлено".
Таким образом, чтобы получить дальнейшие предупреждения
Поэтому я упомянул --illegal-access=deny вместе с опциями --add-exports в IntelliJ.
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="XXX" options="--illegal-access=deny --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED" />
</option>
Тогда я получил ошибку: Java: ошибка: недопустимый флаг: --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
1 ответ
Рефлексивный доступ происходит во время выполнения, поэтому нет способа обнаружить его во время компиляции. Если вы хотите избавиться от предупреждения, вы можете добавить опцию командной строки --add-opens
к вашей конфигурации запуска:
--add-opens=java.base/sun.net.www.protocol.http=ALL-UNNAMED
--add-opens
делает пакет sun.net.www.protocol.http
доступны во время выполнения без предупреждений.
Тем не менее, я рекомендую не использовать эту опцию, а вместо этого выяснить, почему происходит этот незаконный рефлексивный доступ, и попытаться устранить его.