我正在使用sun.misc.BASE64Encoder包中的encode()方法。如何抑制它生成的编译器警告?
sun.misc.BASE64Encoder是Sun专有API,可以在
中删除
作为后续,我为什么不在Eclipse中看到这个警告?
答案 0 :(得分:24)
有一种完全没有记录的方法来抑制太阳专有的API警告!
将-XDignore.symbol.file
添加到javac
命令行。
我在http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630找到了这一点(一直滚动到最后一条评论)。我们都需要对那些添加了最后评论的“xfournet”进行思考!
答案 1 :(得分:16)
您可以切换到不同的Base64实现,例如http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html,它是Apache commons包的一部分,您可能已经包含在类路径中,或者http://iharder.sourceforge.net/current/java/base64/,您可以将其添加到如果您不想在路径上使用另一个Jar,请执行并粘贴在源代码树中。
答案 2 :(得分:7)
答案 3 :(得分:3)
Eclipse确实有一个设置(应该)选择它,参见例如the Eclipse 3.1 release notes中的解释:
首选项→Java→编译器→错误/警告→已弃用和受限制的API→禁止/不鼓励参考
(以及允许特定项目覆盖此设置的项目属性页面)
答案 4 :(得分:2)
你无法关闭它们,Eclipse只是为你过滤它们(如果被告知这样做的话)。
Linux上的快速临时修复:
javac *.java 2>&1 | pcregrep -v -M ".*Sun proprietary API.*\n.*\n.*\^"
2>& 1 ...将STDERR放入STDOUT,因此管道“|”会工作
pcregrep可能存在或可能不存在于您的系统中 - 如果没有,请使用您的包实用程序(例如在Debian,Ubuntu等上:“sudo apt-get install pcregrep”)
表达式搜索“Sun专有API”警告和以下两行(包含行和“^”表示行中错误的位置)。
我留下了“XY警告”。最后排队,以免忘记 警告; o) 请注意,如果您还有其他警告,那么报告的数字当然不正确:o)
另请注意,标准“grep”也不起作用,因为它不能跨越多行。
答案 5 :(得分:2)
如果您了解使用专有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>
答案 6 :(得分:0)
将调用封装在类中,该类放在类路径的库jar中。然后警告仅显示重新编译该库的时间。
答案 7 :(得分:0)
如果您使用的是jdk 1.8,那么您可以使用以下
java.util.Base64
答案 8 :(得分:-3)
javac
选项-Xlint:unchecked
确实可以解决问题:它会停用警告,有关详细信息,请参阅the javac manual