Maven编译器:Xlint和showWarnings之间的区别

Maven编译器:Xlint和showWarnings之间的区别,maven,javac,maven-compiler-plugin,Maven,Javac,Maven Compiler Plugin,,我可以配置maven编译器插件,使用标记显示警告: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <showWarnings>tr

,我可以配置
maven编译器插件
,使用
标记显示警告:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.0</version>
  <configuration>
    <showWarnings>true</showWarnings>
  </configuration>
</plugin>

这两个选项是否完全等效?如果没有,区别是什么?

编译器args控制java编译器的行为。这些设置会传递给编译器,而不是由maven编译器插件直接使用。使用
Xlint
可以控制java编译器在编译过程中输出哪些警告。您还可以添加例如
-Werror
,以在出现警告时中止编译(这通常是一种良好的做法)


另一方面,
showWarnings
配置是maven编译器插件的设置(未传递给java编译器)。它控制插件是否输出java编译器生成的警告。因此,如果将其设置为false(我真的不明白为什么这是默认值),您将看不到java编译器生成的警告。更糟糕的是,即使您在compilerArgs中设置了
-Werror
,构建也不会失败。

您的意思是当我配置-Xlint:all和showWarnings=false时,maven不会输出任何编译器警告吗?是的,我通过测试项目验证了这一点。它将使警告静音(至少是从我的测试代码生成的警告)。此外,如果设置
-Werror
,即使编译器生成警告,构建也会成功。
<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>