Java 如何确定哪个Xlint选项对应于编译器警告?
我的软件版本使用Java 如何确定哪个Xlint选项对应于编译器警告?,java,maven,compiler-warnings,lint,java-11,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/
-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编译器插件3.8.0、JDK 11.0.1一种方法,如果您无法访问
javac --help-extra
这将列出您可以启用/禁用的可能警告。例如,从javac12ea
:
艾伦·贝特曼为我指出了正确的方向。maven编译器插件似乎隐藏了重要信息。以下是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编译器插件的相应输出:
[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
将抑制此警告
我在这里提交了一份错误报告:始终存在错误。哪个编译器仍然存在?询问,因为使用javac时,警告将是“[module]module not found:…”和“[module]”,提示-Xlint:-module可能会抑制它。@JonnyHenly是的,修复了。谢谢你。@AlanBateman你说得对。马文错了。我将在下面发布一个更详细的答案。正如问题中提到的,我认为这不够好,因为一些错误(例如问题中提到的错误)可能属于多个选项。在其他情况下(目前还没有想到具体的例子),我记得上面哪一项应该适用并不明显。@Gili我同意,这不是决定在两个选项中选择哪一个的绝对方法。但另一方面,它确实让我们深入了解了如何对警告进行分类。