Как правильно подавить предупреждение "требуется транзитивная директива для автоматического модуля"?
после обновления проекта Maven до Java 9 и добавления дескриптора модуля,javac
жалуется на транзитивная зависимость для автоматического модуля:
[предупреждение] /.../ src/main/java / module-info.java: [3,35]
requires transitive
директива для автоматического модуля
пример module-info.java
воспроизвести проблему:
module com.example.mymodule {
exports com.example.mymodule.myexportedpackage;
requires transitive com.google.common;
}
на смысл этого предупреждения совершенно ясно, вот некоторые связанные ссылки:
- в чем разница между требованиями и требует транзитивных операторов в Java 9?
- почему javac жалуется на именованные автоматические модули?
- связанная проблема OpenJDK
вопрос - как подавить это предупреждение, без исправления фактической проблемы и без отключения всех других javac
предупреждения?
я пробовал следующие варианты, но ни один из них не работал:
-
@SuppressWarnings("module")
наmodule-info.java
-
@SuppressWarnings("all")
наmodule-info.java
-
-Xlint:all,-module
опции командной строки
к сожалению, я не могу исправить фактическую проблему (на данный момент), потому что "мой" модуль имеет возвращаемые типы и аннотации от сторонних (автоматических) модулей (например, Guava). Таким образом, если бы я использовал "требует com.гуглить.общие" (без transitive
), то было бы другое предупреждение, например:
[предупреждение] .../ MyClass.java: [25,20] класс
com.google.common.collect.Table
в модулеcom.google.common
косвенно не экспортируется с помощьюrequires transitive
и, конечно, я не могу определить дескрипторы модулей для сторонних библиотек (которые сейчас являются автоматическими модулями).
я использую -Werror
который я бы предпочел сохранить, поэтому предупреждение не просто раздражает...
P. S. Я не собираюсь опубликуйте мои артефакты в любых общедоступных хранилищах.
1 ответов
вы можете попробовать вариант отключения предупреждения с помощью
-Xlint:-requires-transitive-automatic
изменения, для которых были объединены с JDK-8178011 С указанием:-
там должно быть два новых предупреждения:
- когда именованный модуль "требует транзитивного" автоматического модуля (по умолчанию)
- когда именованный модуль "требует" автоматический модуль (по умолчанию выключен)
вывод этот от изменений, сделанных здесь а также от редактирования до JEP 261: модуль системы что подтверждает это (акцент мой): -
в обоих модульных режимах компилятор по умолчанию будет генерировать различные предупреждения, связанные с системой модуля; они могут быть отключены через опцию
-Xlint:-module
.более точный контроль этих предупреждений доступен через экспорт, открывает, требует-автомат, и требуется-transitive-автоматические ключи для
-Xlint
опции.