【问题标题】:Maven compiler : difference between Xlint and showWarningsMaven 编译器:Xlint 和 showWarnings 之间的区别
【发布时间】:2019-02-28 08:46:09
【问题描述】:

According to documentation,我可以配置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 其中 "enables all recommended warnings"

<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>

这两个选项严格等效吗?如果不是,有什么区别?

【问题讨论】:

    标签: maven javac maven-compiler-plugin


    【解决方案1】:

    compilerArgs 控制 java 编译器的行为。这些设置被传递给编译器,而不是由 maven-compiler-plugin 直接使用。使用Xlint,您可以控制java 编译器从编译过程中输出哪些警告。您还可以添加例如-Werror 在出现警告时中止编译(这通常是一个好习惯)。

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

    【讨论】:

    • 你的意思是说当我配置-Xlint:all和showWarnings=false时,maven不会输出任何编译器警告吗?
    • 是的,我通过一个测试项目验证了这一点。它将使警告静音(至少是从我的测试代码生成的警告)。此外,如果您设置-Werror,即使编译器生成警告,构建也会成功。
    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多