禁止javac警告“…是内部专有API,可能在未来版本中删除”

当我在JDK 1.7.0的OS X上编译Spring JDBC源代码时,出现以下警告:

warning: CachedRowSetImpl is internal proprietary API and may be removed in a future release 

如何在编译期间抑制警告消息?

我已经知道并使用Java的@SuppressWarning注解。 我正在寻找这个特定的用法来抑制我所描述的警告。

我的问题具体是,在这行代码中:

 @SuppressWarnings("valuegoeshere") 

什么应该“valuegoeshere”被replace?

编辑:人们,我知道最好避免导致警告的代码。 通常这将是我的方法。 不过,我在这里编译第三方代码,我不想重写。 我只是想添加正确的注释来压制警告,所以我可以做一些事情的警告不要被埋没。

这个特殊的警告不能被压制 。 至less不正式。

有关专有API的警告意味着您不应使用导致警告的API。 Sun不支持这样的API,警告不会被消除。

如果您特别确定,可以使用高度未logging的javac -XDignore.symbol.file标志,该标志将针对Sun的内部rt.jar而不是面向公众的符号文件ct.sym编译您的程序。 rt.jar不会产生这个警告。

如果你正在使用maven,你可能有兴趣将以下内容添加到你的pom.xml文件中:

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerArgument>-XDignore.symbol.file</compilerArgument> </configuration> </plugin> 

引用其接口CachedRowSet不是实现。

看到这个答案

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

testing代码

 @SuppressWarnings("sunapi") sun.security.x509.X509CertImpl test; 

编译命令行

 javac test.java -Werror -Xlint:sunapi -XDenableSunApiLintControl 

要么

 javac test.java -Werror -Xlint:all -XDenableSunApiLintControl 

编译通过没有任何警告

删除SuppressWarnings标签并重新编译

那么报错

 test.java:4: warning: X509CertImpl is internal proprietary API and may be removed in a future release sun.security.x509.X509CertImpl test; ^ error: warnings found and -Werror specified 1 error 1 warning 

我试过了

 @SuppressWarnings("all") 

但是这并没有奏效。

于是我采取了一个可怕的,可怕的混乱,我一般不推荐,但在这个具体情况下,警告消失了。 我使用reflection来实例化com.sun.rowset.CachedRowSetImpl类的新实例。

我replace了这条线,这引起了警告:

  return new CachedRowSetImpl(); 

与此块:

  try { final Class<?> aClass = Class.forName("com.sun.rowset.CachedRowSetImpl"); return (CachedRowSet) aClass.newInstance(); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { throw new RuntimeException(e); } 

没有先考虑其他select,请不要在自己的代码中执行此操作。

尝试javac选项

 -Xlint:none 

如果您从IDE进行编译,则应该有一个选项来禁用警告。

这将禁用所有不属于Java语言规范的警告。 因此,例如“未经检查”的警告将不会被阻止。