Компилятор Maven: разница между Xlint и showWarnings
По документации могу настроить maven-compiler-plugin
показывать предупреждения, используя <showWarnings>
тег:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
Я также могу настроить плагин для передачи аргументов в javac, в частности -Xlint:all
который "включает все рекомендуемые предупреждения":
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<compilerArgs>
<arg>-Xlint:all</arg>
</compilerArgs>
</configuration>
</plugin>
Эти два варианта строго эквивалентны? Если нет, то в чем разница?
1 ответ
compilerArgs
контролирует поведение компилятора Java. Эти настройки передаются компилятору и не используются напрямую maven-compiler-plugin. С помощью Xlint
Вы можете контролировать, какие предупреждения выводит компилятор Java из процесса компиляции. Вы также можете добавить, например, -Werror
отменить компиляцию по предупреждениям (что в целом является хорошей практикой).
showWarnings
конфигурация, с другой стороны, является настройкой для подключаемого модуля maven-compiler-plugin (не передается компилятору java). Он контролирует, будет ли плагин выводить предупреждения, сгенерированные компилятором java. Так что если вы установите его в false (я действительно не понимаю, почему это по умолчанию), вы не увидите предупреждений, сгенерированных компилятором java. Хуже того, сборка не провалится, даже если вы установили -Werror
в compilerArgs.