16

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

sun.misc.BASE64Encoder 是 Sun 专有的 API,可以在

作为后续,为什么我在 Eclipse 中没有看到这个警告?

4

9 回答 9

25

有一种完全未记录的方法可以抑制 sun 专有 API 警告!添加-XDignore.symbol.filejavac命令行。

我在http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630找到了这个(一直滚动到最后一条评论)。我们都需要考虑对添加最后一条评论的“xfournet”的善意的想法!

于 2012-03-05T20:08:58.917 回答
17

您可以切换到不同的 Base64 实现,例如http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html,它是 Apache commons 包的一部分,您可以已经包含在您的类路径或http://iharder.sourceforge.net/current/java/base64/中,如果您不希望路径上有另一个 Jar,您可以执行并粘贴在源代码树中。

于 2009-07-16T10:24:24.663 回答
7

因为您无法禁用此警告

于 2009-07-16T10:23:21.153 回答
3

Eclipse 确实有一个设置(应该)选择它,例如参见Eclipse 3.1 发行说明中的​​描述:

Preferences → Java → Compiler → Errors/Warnings → Deprecated And Restricted API → Forbidden/Discouraged Reference

(以及项目属性页面以允许此设置的项目特定覆盖)

于 2009-11-22T22:52:23.283 回答
2

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.

于 2009-11-22T20:55:35.283 回答
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>
于 2013-10-21T20:07:28.650 回答
0

将调用封装在您放置在类路径上的库 jar 中的类中。然后警告仅在重新编译该库时显示。

于 2009-07-16T10:37:22.360 回答
0

如果您使用的是 jdk 1.8,那么您可以使用以下

java.util.Base64
于 2018-02-20T13:45:17.633 回答
-3

javac选项-Xlint:unchecked确实可以解决问题:它禁用警告,有关详细信息,请参阅javac 手册

于 2011-05-17T11:31:13.013 回答