如何找出哪个Xlint选项对应于编译器警告?

时间:2018-12-07 20:11:07

标签: java maven compiler-warnings lint java-11

我的软件版本使用-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

2 个答案:

答案 0 :(得分:2)

如果您无法访问online documentation,则可以使用命令

javac --help-extra

这将列出您可以启用/禁用的可能的警告。例如,来自 javac 12-ea

enter image description here

答案 1 :(得分:2)

艾伦·贝特曼(Alan Bateman)向我指出了正确的方向。看来,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