Компилятор 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.

Другие вопросы по тегам