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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确定哪个Xlint选项对应于编译器警告?相关的知识,希望对你有一定的参考价值。

我的软件构建使用-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

答案

一种方法,如果以某种方式你无法访问online documentation可能正在使用该命令

javac --help-extra

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

enter image description here

另一答案

艾伦贝特曼指出我正确的方向。似乎maven-compiler-plugin压制重要信息。这是javac 11.0.1的输出:

C:UsersGiliDocuments
equirementsjavasrcmainjavamodule-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

以上是关于如何确定哪个Xlint选项对应于编译器警告?的主要内容,如果未能解决你的问题,请参考以下文章

java中遇到-xlint:unchecked,如何使用?求高手指教!

Xlint以及Java Lint 选项

如何确定哪个文件对应于 Android 应用程序上的屏幕?

如何在 Maven 项目中使用 -Xlint:unchecked 进行编译?

如何在 Ant 构建任务中使用 -Xlint:unchecked 重新编译?

如何使用 -Xlint:unchecked 重新编译?