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

如何抑制有关Sun专有API的java编译器警告,java,eclipse,api,base64,sun,Java,Eclipse,Api,Base64,Sun,我正在使用sun.misc.BASE64Encoder包中的encode()方法。如何抑制它生成的编译器警告 sun.misc.BASE64Encoder是sun专有API,可以在中删除 作为后续,为什么我在Eclipse中看不到这个警告?您可以切换到不同的Base64实现,例如,它是Apache commons包的一部分,您可能已经包含在您的类路径中,或者,如果您不希望在路径上有另一个Jar,您可以将其实现并保留在源代码树中。将调用封装在一个类中,并将其放置在类路径上的库Jar中。然后,警告仅

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

sun.misc.BASE64Encoder是sun专有API,可以在中删除


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

您可以切换到不同的Base64实现,例如,它是Apache commons包的一部分,您可能已经包含在您的类路径中,或者,如果您不希望在路径上有另一个Jar,您可以将其实现并保留在源代码树中。

将调用封装在一个类中,并将其放置在类路径上的库Jar中。然后,警告仅在重新编译该库时显示。

您不能关闭它们,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”也不起作用,因为它不能跨越多行。

Eclipse确实有一个设置(应该)选择它,例如,请参见:

偏好→ JAVA→ 编译程序→ 错误/警告→ 已弃用和受限制的API→ 禁止/不鼓励引用


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

使用
javac
选项
-Xlint:unchecked
可以做到这一点:它禁用警告,有关详细信息,请参阅有一种完全没有文档记录的方式来抑制sun专有API警告! 将
-XDignore.symbol.file
添加到
javac
命令行


我在(滚动到最后一条评论)找到了这个。我们都需要对添加了最后一条评论的“xfournet”好好想想

如果您了解使用专有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>

org.apache.maven.plugins
maven编译器插件
2.3.2
-XDignore.symbol.file

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

java.util.Base64

可以用另一个实现来替换它,例如,或者不抑制警告,为什么不呢?不,该标志不会禁用此特定警告。谢谢!这正是我需要的!值得记住的是,为什么警告存在,为什么不可能关闭它,而不是使用
@SuppressWarnings(“all”)
,或
-nowarn
-Xlint:none
-xmaxwarnings 0
。如果依赖内部类,程序迟早会崩溃。但是当你知道自己在做什么,并且专有的API警告只是噪音阻塞了控制台时,这是一个很好的攻击。谢谢啊,但是你可以关掉它们!看迈克尔·查维斯的回答!我是否可以将导入更改为ApacheCommons版本,然后所有内容都可以正常工作?