如何抑制Java编译器有关Sun专有API的警告?

16

我正在使用sun.misc.BASE64Encoder包中的encode()方法。如何抑制它生成的编译器警告?

sun.misc.BASE64Encoder是Sun的专有API,可能会在未来删除。

作为后续问题,为什么我在Eclipse中看不到这个警告?


1
可以使用另一种实现来替换它,例如 http://iharder.sourceforge.net/current/java/base64/。 - JeeBee
5
Apache Commons Codec 是一个 Java 库,其中包含实现不同编码和解码算法的类。其中,org.apache.commons.codec.binary.Base64 类提供了对 Base64 编码和解码的支持。您可以访问 http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html 查看有关该类的详细文档。 - JeeBee
为什么不使用Java 8提供的编码器而不是专有API,而不是抑制警告呢? - Raedwald
9个回答

25

有一种完全未记录的方法可以抑制Sun专有API警告! 在javac命令行中添加-XDignore.symbol.file

我在https://bugs.java.com/bugdatabase/view_bug?bug_id=6476630找到了这个方法(滚动到最后一条评论)。我们都应该对“xfournet”心怀感激,他添加了最后一条评论!


4
值得记住为什么会存在这个警告,以及为什么不应该使用 @SuppressWarnings("all")-nowarn-Xlint:none-Xmaxwarns 0 来关闭它。如果你依赖于内部类,你的程序迟早会出问题。但当你知道自己在做什么的时候,这是一个好用的技巧,因为专有 API 警告只是噪音干扰控制台。谢谢! - Boann

17

我能否只将导入改为Apache Commons版本,一切都能正常工作吗? - Robert Niestroj

7
因为无法禁用此警告,详见此处

3
Eclipse有一个设置(应该)可以识别这个问题,例如在Eclipse 3.1版本说明中描述:

首选项 → Java → 编译器 → 错误/警告 → 弃用和受限API → 禁止/不推荐引用

(项目属性页面允许对此设置进行项目特定的覆盖)


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>

2

您无法关闭它们,Eclipse只是为您过滤它们(如果被告知这样做)。

Linux的快速临时解决方案:

javac *.java 2>&1 | pcregrep -v -M ".*Sun proprietary API.*\n.*\n.*\^"

2>&1将标准错误输出放入标准输出中,这样管道“|”将可以正常工作。

pcregrep可能存在于您的系统上,也可能不存在 - 如果不存在,请使用软件包实用程序(例如,在Debian、Ubuntu等上:“sudo apt-get install pcregrep”)

该表达式搜索“Sun专有API”警告和接下来的两行(包含该行以及“^”表示该行中错误位置)。

我在最后保留了“XY warnings.”一行,以免忘记有警告;o) 请注意,如果您还有其他警告,那么报告的数字当然不正确:o)

还要注意,标准的“grep”无法跨越多行工作,因此不能很好地处理该问题。


啊,但你可以关闭它们!请看迈克尔·查维斯的回答! - Tim Lewis

1
如果您正在使用jdk 1.8,则可以使用以下内容
java.util.Base64

0

将调用封装在一个类中,然后将该类放置在库JAR中,并将其放置在您的类路径上。这样,只有在重新编译该库时才会显示警告。


-3

javac选项-Xlint:unchecked可以解决这个问题:它会禁用警告,详见javac手册


2
不,那个标志不会禁用这个特定的警告。 - Noel Grandin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接