我正在使用 sun.misc.BASE64Encoder 包中的 encode() 方法。如何抑制它生成的编译器警告?
sun.misc.BASE64Encoder 是 Sun 专有的 API,可以在
作为后续,为什么我在 Eclipse 中没有看到这个警告?
有一种完全未记录的方法可以抑制 sun 专有 API 警告!添加-XDignore.symbol.file
到javac
命令行。
我在http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630找到了这个(一直滚动到最后一条评论)。我们都需要考虑对添加最后一条评论的“xfournet”的善意的想法!
您可以切换到不同的 Base64 实现,例如http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html,它是 Apache commons 包的一部分,您可以已经包含在您的类路径或http://iharder.sourceforge.net/current/java/base64/中,如果您不希望路径上有另一个 Jar,您可以执行并粘贴在源代码树中。
Eclipse 确实有一个设置(应该)选择它,例如参见Eclipse 3.1 发行说明中的描述:
Preferences → Java → Compiler → Errors/Warnings → Deprecated And Restricted API → Forbidden/Discouraged Reference
(以及项目属性页面以允许此设置的项目特定覆盖)
You can't switch them off, Eclipse simply filters them for you (if told to do so).
Quick interim fix on Linux:
javac *.java 2>&1 | pcregrep -v -M ".*Sun proprietary API.*\n.*\n.*\^"
2>&1 ... puts STDERR into STDOUT, so the pipeline "|" will work
pcregrep might or might not be present on your system - if not, use your package utility (e.g. on Debian, Ubuntu etc: "sudo apt-get install pcregrep")
The expression searches for the "Sun proprietary API" warning and the following two lines (containing the line and the "^" indicating the position of the error in the line).
I leave the "XY warnings." line in at the end, lest I forget there were warnings ;o) Note that if you have other warnings as well, the number reported there will of course not be correct :o)
NOTE also that standard "grep" does not work as well, because it can't span multiple lines.
如果您了解使用专有 API 的固有问题并决定这样做,并且如果您使用的是 maven,您可能有兴趣将以下内容添加到您的pom.xml
文件中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<compilerArgument>-XDignore.symbol.file</compilerArgument>
</configuration>
</plugin>
将调用封装在您放置在类路径上的库 jar 中的类中。然后警告仅在重新编译该库时显示。
如果您使用的是 jdk 1.8,那么您可以使用以下
java.util.Base64
该javac
选项-Xlint:unchecked
确实可以解决问题:它禁用警告,有关详细信息,请参阅javac 手册