Как определить, какой параметр Xlint соответствует предупреждению компилятора?

Мои сборки программного обеспечения используют -Xlint -Werror, поэтому я регулярно сталкиваюсь с предупреждениями компилятора, которые нарушают мою сборку. Время от времени я сталкиваюсь с предупреждением, которое мне нужно подавить, но всегда трудно понять, какой Xlint параметр подавляет предупреждение, которое я вижу.

Приведу конкретный пример. Недавно наткнулся:

[WARNING] module-info.java:[16,106] module not found: 
    org.bitbucket.cowwoc.requirements.guava

Я просмотрел исходный код JDK 11 и обнаружил это предупреждающее сообщение, объявленное в /src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties как:

# 0: symbol
compiler.err.module.not.found=\
    module not found: {0}

Теперь выясняется, что это подавляется -Xlint:-module, но это не очевидно из документации. -Xlint:-export тоже может иметь смысл. В прошлом я также сталкивался с предупреждениями, которые вообще нельзя было подавить (впоследствии они были исправлены).

Вместо того чтобы прибегать к методам проб и ошибок, существует ли детерминированный способ выяснить, какой Xlint параметр соответствует каждому предупреждающему сообщению? Есть ли где-то в исходных кодах JDK какой-то файл сопоставления?

ОБНОВЛЕНИЕ: я использую Maven 3.6.0, maven-compiler-plugin 3.8.0, JDK 11.0.1


person Gili    schedule 07.12.2018    source источник
comment
Всегда есть документация javac.   -  person VGR    schedule 08.12.2018
comment
Какой еще компилятор? Спрашивает, потому что с javac тогда предупреждение будет [модуль] модуль не найден: ... и [модуль] дает вам подсказку, что -Xlint: -module может подавить его.   -  person Alan Bateman    schedule 08.12.2018
comment
@JonnyHenly Да, исправлено. Спасибо.   -  person Gili    schedule 08.12.2018
comment
@AlanBateman Вы правы. Maven виноват. Я отправлю ответ с более подробной информацией ниже.   -  person Gili    schedule 08.12.2018


Ответы (2)


Один из способов сделать это, если по каким-то причинам вы не можете получить доступ к в интерактивной документации можно использовать команду

javac --help-extra

В нем будут перечислены возможные предупреждения, которые вы можете включить / отключить. Например, из javac 12-ea:

введите здесь описание изображения

person Naman    schedule 08.12.2018
comment
Как упоминалось в вопросе, я не думаю, что это достаточно хорошо, потому что некоторые ошибки (например, упомянутая в вопросе) могут относиться к нескольким вариантам. В других случаях (на данный момент никаких конкретных примеров в голову не приходит) я помню, что было неочевидно, что из вышеперечисленного должно применяться. - person Gili; 08.12.2018
comment
@Gili Я согласен с тем, что это не абсолютный способ определить, какой из двух вариантов следует выбрать. Но с другой стороны, это определенно дает представление о том, как можно классифицировать предупреждения. - person Naman; 08.12.2018

Алан Бейтман указал мне правильное направление. Похоже, что maven-compiler-plugin подавляет жизненно важную информацию. Вот результат javac 11.0.1:

C:\Users\Gili\Documents\requirements\java\src\main\java\module-info.java:16: warning: [module] module not found: org.bitbucket.cowwoc.requirements.guava
        exports org.bitbucket.cowwoc.requirements.java.internal.impl to org.bitbucket.cowwoc.requirements.guava;

Вот соответствующий вывод maven-compiler-plugin:

[WARNING] /C:/Users/Gili/Documents/requirements/java/src/main/java/module-info.java:[16,106] module not found: org.bitbucket.cowwoc.requirements.guava

javac упоминает [module] в начале предупреждения, указывая, что -Xlint:-module подавит это предупреждение.

Я отправил отчет об ошибке здесь: https://issues.apache.org/jira/browse/MCOMPILER-367

person Gili    schedule 08.12.2018