无法阻止ant生成编译器Sun专有的API警告

我从我的ant脚本中调用javac,如下所示:

 

但它仍然会在输出中抛出编译器警告:

 [javac] Compiling 73 source files to C:\IKOfficeRoot\Java\ERP\Framework\build\classes [javac] C:\IKOfficeRoot\Java\ERP\Framework\src\de\ikoffice\util\LoggerFactory.java:49: warning: sun.reflect.Reflection is Sun proprietary API and may be removed in a future release [javac] return Logger.getLogger(Reflection.getCallerClass(2)); [javac] ^ [javac] Note: C:\IKOfficeRoot\Java\ERP\Framework\src\de\ikoffice\db\SingleShotResultSet.java uses or overrides a deprecated API. [javac] Note: Recompile with -Xlint:deprecation for details. [javac] Note: Some input files use unchecked or unsafe operations. [javac] Note: Recompile with -Xlint:unchecked for details. [javac] 1 warning 

我也试过了

  

  

但这也没有效果。 如何删除警告?

-XDignore.symbol.file选项添加到javac命令行为我工作。

执行此操作的最佳方法是使用sunapi抑制,即-Xlint:-sunapi用于整个编译,或@SuppressWarnings("sunapi")在您所需的范围内。

注意,使用此抑制的唯一方法是首先使用编译器选项-XDenableSunApiLintControl启用它

enableSunApiLintControl

你不能这样做 :既不是从命令行,也不是从Ant那里做的。

javac文档说:

-Xlint:无

禁用Java语言规范未强制要求的所有警告。

所以似乎这种警告无法被抑制,因为它们是由JLS直接引发的。

你能做的是:

  1. 在所需的位置使用@SuppressWarnings({"deprecation"}, {"unchecked"})
  2. 使用一些解决方法将警告消息重定向到/dev/null
  3. 尝试使用-Xlint:-unchecked -Xlint:-deprecation参数从命令行进行编译,这可能只是与Ant相关的问题。

建议:不要忽略编译器的警告。 警告是有原因的。 我公司的遗留代码库正朝着“将警告视为错误并使构建失败”模式转变,因为我们可以花费精力修复编译周期中产生的警告。

在您的情况下,警告是:

 warning: sun.reflect.Reflection is Sun proprietary API and may be removed in a future release 

只要我记得,它始终是一个警告,不要从sun包导入,因为它们是非公共API。 在官方的Oracle Java站点上甚至还有关于它的FAQ 。

你还没有发布你的实际代码,所以很难提供进一步的建议……你在sun.reflect.Reflection中使用了什么,你不能通过java.lang.reflect东西做什么?

使用nowarn属性见下文

例如

  

默认情况下,nowarn属性已关闭

为防止弃用警告,我尝试使用JDK 6和JDK 7来完成。

使用JDK 7, @Deprecated注释可以完成工作

使用JDK 6,它不起作用,也不添加-Xlint:-deprecation param对我-Xlint:-deprecation 。 我设法删除警告的唯一方法是使用@deprecated Javadoc标记 :

  /** * @deprecated */ @Override public void removeValue(String arg0) { // TODO Auto-generated method stub }