如何抑制有关Sun专有API的java编译器警告
我正在使用sun.misc.BASE64Encoder包中的encode()方法。如何抑制它生成的编译器警告 sun.misc.BASE64Encoder是sun专有API,可以在中删除如何抑制有关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中。然后,警告仅
作为后续,为什么我在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版本,然后所有内容都可以正常工作?