Как правильно подавить предупреждение "требуется транзитивная директива для автоматического модуля"?

после обновления проекта 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;
}

на смысл этого предупреждения совершенно ясно, вот некоторые связанные ссылки:

вопрос - как подавить это предупреждение, без исправления фактической проблемы и без отключения всех других 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 опции.