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



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

<javac srcdir="src" 
   destdir="build/classes" source="1.6" 
   target="1.6" debug="true" encoding="Cp1252"
   nowarn="true"> 

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

[javac] Compiling 73 source files to C:IKOfficeRootJavaERPFrameworkbuildclasses
[javac] C:IKOfficeRootJavaERPFrameworksrcdeikofficeutilLoggerFactory.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:IKOfficeRootJavaERPFrameworksrcdeikofficedbSingleShotResultSet.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

我也试过

<compilerarg line="-Xlint:-unchecked -Xlint:-deprecation"/>

<compilerarg value="-Xlint:none"/>

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

-XDignore.symbol.file选项添加到javac命令行对我有效。

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

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

enableSunApiLintControl

使用nowarn属性请参阅下面的

例如

<javac srcdir="src" 
   destdir="build/classes" source="1.6" 
   target="1.6" debug="true" encoding="Cp1252"
   nowarn="on">

默认情况下,nowarn属性关闭

您不能从命令行执行这两个操作:也不能从Ant执行。

javac文档中写道:

-Xlint:无

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

因此,这种警告似乎无法压制,因为它们是由仲量联行直接提出的。

你能做的是:

  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官方网站上甚至有一个关于它的常见问题解答。

您尚未发布实际代码,因此很难提供进一步的建议。。。你在sun.reflect.Reflection中使用了什么,而在java.lang.reflect中却无法做到这一点?

为了防止出现弃用警告,我尝试使用JDK6和JDK7。

使用JDK7,@Deprecated注释完成

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

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

相关内容

  • 没有找到相关文章

最新更新