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

IT小君   2021-12-09T03:48:32

我从我的 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:\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

我也试过

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

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

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

点击广告,支持我们为你提供更好的服务
评论(6)
IT小君

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

2021-12-09T03:48:33   回复
IT小君

最好的方法是使用sunapi抑制,即-Xlint:-sunapi用于整个编译,或@SuppressWarnings("sunapi")在您需要的范围内。

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

启用S​​unApiLintControl

2021-12-09T03:48:33   回复
IT小君

使用 nowarn 属性见下文

例如

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

默认情况下,nowarn 属性关闭

2021-12-09T03:48:33   回复
IT小君

您不能这样做:既不能从命令行执行此操作,也不能从 Ant 执行此操作。

javac的文件说:

-Xlint:无

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

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

你可以做的是:

  1. @SuppressWarnings({"deprecation"}, {"unchecked"})在需要的位置
  2. 使用一些解决方法将警告消息重定向到 /dev/null
  3. 尝试使用-Xlint:-unchecked -Xlint:-deprecation参数从命令行编译,也许这只是一个与 Ant 相关的问题。
2021-12-09T03:48:33   回复
IT小君

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

在您的情况下,警告是:

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

2021-12-09T03:48:33   回复
IT小君

为了防止出现弃用警告,我尝试使用 JDK 6 和 JDK 7 来做到这一点。

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

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

  /**
   * @deprecated
   */
  @Override
  public void removeValue(String arg0) {
    // TODO Auto-generated method stub
  }
2021-12-09T03:48:34   回复