禁止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语言规范的警告。 因此,例如“未经检查”的警告将不会被阻止。