Как правильно подавить предупреждение "требуется транзитивная директива для автоматического модуля"?
после обновления проекта 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опции.