OS XでJDK 1.7.0を使用してSpring JDBCソースをコンパイルすると、次の警告が表示されます。
warning: CachedRowSetImpl is internal proprietary API and may be removed in a future release
コンパイル中に警告メッセージを抑制するにはどうすればよいですか?
私はすでにJavaの@SuppressWarningアノテーションを知っていて使用しています。私が説明した警告を抑制するために、これを具体的に使用する方法を探しています。
私の質問は、具体的には、次のコード行です。
@SuppressWarnings("valuegoeshere")
「valuegoeshere」は何に置き換える必要がありますか?
編集:人々、私はそれが警告につながるコードを避けることが最善であることを知っています。そして、通常はそれが私のアプローチです。ただし、ここでは書き直したくないサードパーティのコードをコンパイルしています。警告を抑制するために正しい注釈を追加したいだけなので、実際にできる警告が埋まらないようにします。
この特定の警告 は抑制できません 。少なくとも公式ではありません。
独自のAPIに関する警告は、警告の原因となるAPIを使用しないことを意味します。 SunはそのようなAPIをサポートしておらず、警告は抑制できません。
特に決心している場合は、文書化されていない 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>
この答えを見てください
テストコード
@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
そのインターフェースを参照してください CachedRowSet 実装ではありません。
私は試した
@SuppressWarnings("all")
しかし、それはうまくいきませんでした。
だから私は一般的にはお勧めしませんが、この特定のケースでは警告を消し去りました。リフレクションを使用して、com.Sun.rowset.CachedRowSetImplクラスの新しいインスタンスをインスタンス化しました。
この行を置き換えたため、警告が発生しました。
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);
}
最初に他のオプションを考慮せずに、独自のコードでこれを実行しないでください。
Javacオプションを試してください
-Xlint:none
IDEからコンパイルする場合、警告を無効にするオプションが必要です。
これにより、Java Language Specification。の一部ではないすべての警告が無効になります。たとえば、「未チェック」警告はブロックされません。