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

问题描述 投票:3回答:2

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

java maven compiler-warnings lint java-11
2个回答
2
投票

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

javac --help-extra

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

enter image description here


2
投票

艾伦贝特曼指出我正确的方向。似乎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

© www.soinside.com 2019 - 2024. All rights reserved.