web-dev-qa-db-ja.com

javacの警告「...は内部の独自のAPIであり、将来のリリースで削除される可能性があります」を抑制

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」は何に置き換える必要がありますか?

編集:人々、私はそれが警告につながるコードを避けることが最善であることを知っています。そして、通常はそれが私のアプローチです。ただし、ここでは書き直したくないサードパーティのコードをコンパイルしています。警告を抑制するために正しい注釈を追加したいだけなので、実際にできる警告が埋まらないようにします。

44
Steve McLeod

この特定の警告 は抑制できません 。少なくとも公式ではありません。

独自のAPIに関する警告は、警告の原因となるAPIを使用しないことを意味します。 SunはそのようなAPIをサポートしておらず、警告は抑制できません。

特に決心している場合は、文書化されていない javac -XDignore.symbol.file フラグを使用して、Sunの内部rt.jarに対してプログラムをコンパイルできます。公共向けのシンボルファイルct.symではなく。 rt.jarはこの警告を生成しません。

46
John Kugelman

Mavenを使用している場合は、pom.xmlファイル:

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <compilerArgument>-XDignore.symbol.file</compilerArgument>
    </configuration>
</plugin>
21
Brandon Mintern

この答えを見てください

antがコンパイラSun独自のAPI警告を生成するのを止めることはできません

テストコード

@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
11
William Leung

そのインターフェースを参照してください CachedRowSet 実装ではありません。

8
Boris Pavlović

私は試した

@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);
    }

最初に他のオプションを考慮せずに、独自のコードでこれを実行しないでください。

3
Steve McLeod

Javacオプションを試してください

-Xlint:none

IDEからコンパイルする場合、警告を無効にするオプションが必要です。

これにより、Java Language Specification。の一部ではないすべての警告が無効になります。たとえば、「未チェック」警告はブロックされません。

0
Jakub Zaverka