【问题标题】:How can I suppress java compiler warnings about Sun proprietary API [duplicate]如何抑制关于 Sun 专有 API 的 Java 编译器警告 [重复]
【发布时间】:2010-11-11 07:42:49
【问题描述】:

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

sun.misc.BASE64Encoder 是 Sun 专有的 API,可以在

中删除

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

【问题讨论】:

标签: java eclipse api base64 sun


【解决方案1】:

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

java.util.Base64

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      有一种完全没有记录的方法可以抑制 sun 专有 API 警告! 将-XDignore.symbol.file 添加到javac 命令行。

      我在http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630 找到了这个(一直滚动到最后一条评论)。我们都需要考虑一下添加最后一条评论的“xfournet”!

      【讨论】:

      • 谢谢!这正是我需要的!
      • 值得记住警告为什么存在,以及为什么不能关闭它,而不是@SuppressWarnings("all")-nowarn-Xlint:none-Xmaxwarns 0。如果您依赖内部类,您的程序迟早会中断。但是,当您知道自己在做什么并且专有的 API 警告只是阻塞控制台的噪音时,这是一个巧妙的技巧。谢谢!
      【解决方案4】:

      javac 选项 -Xlint:unchecked 确实可以解决问题:它会禁用警告,有关详细信息,请参阅 the javac manual

      【讨论】:

      • 不,该标志不会禁用此特定警告。
      【解决方案5】:

      Eclipse 确实有一个设置(应该)选择它,参见例如the Eclipse 3.1 release notes中的描述:

      Preferences → Java → Compiler → Errors/Warnings → Deprecated And Restricted API → Forbidden/Discouraged Reference

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

      【讨论】:

        【解决方案6】:

        您无法关闭它们,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”也不能正常工作,因为它不能跨越多行。

        【讨论】:

        • 啊,但你可以关掉它们!看看 Michael Chaves 的回答!
        【解决方案7】:

        将调用封装在您放置在类路径上的库 jar 中的类中。然后警告仅在重新编译该库时显示。

        【讨论】:

          【解决方案8】:

          您可以切换到不同的 Base64 实现,例如 http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html,它是 Apache commons 包的一部分,您可能已经包含在您的类路径中,或者您可以直接采用并坚持使用 http://iharder.sourceforge.net/current/java/base64/如果您不希望路径上有另一个 Jar,请使用您的源代码树。

          【讨论】:

          • 我可以只将导入更改为 Apache Commons 版本,evertyhing 也可以正常工作吗?
          【解决方案9】:
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-02
          • 1970-01-01
          • 1970-01-01
          • 2011-03-26
          • 2011-02-20
          • 1970-01-01
          相关资源
          最近更新 更多