web-dev-qa-db-fra.com

Supprimer l'avertissement javac "... est une API propriétaire interne et peut être supprimée dans une version ultérieure"

Lorsque je compile la source Spring JDBC sur OS X avec JDK 1.7.0, j'obtiens cet avertissement:

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

Comment supprimer le message d'avertissement lors d'une compilation?

Je connais et utilise déjà les annotations @SuppressWarning de Java. Je cherche l'utilisation spécifique de ceci pour supprimer l'avertissement que j'ai décrit.

Ma question est précisément, dans cette ligne de code:

@SuppressWarnings("valuegoeshere")

par quoi remplacer "valuegoeshere"?

EDIT: Les gens, je sais qu'il vaut mieux éviter le code qui mène à l'avertissement. Et généralement, ce serait mon approche. Cependant, je compile ici du code tiers que je ne veux pas réécrire. Je veux juste ajouter l'annotation correcte pour supprimer l'avertissement, afin que les avertissements que je puisse faire ne soient pas enterrés.

44
Steve McLeod

Cet avertissement particulier ne peut pas être supprimé . Du moins pas officiellement.

L'avertissement concernant l'API propriétaire signifie que vous ne devez pas utiliser l'API qui provoque l'avertissement. Sun ne prend pas en charge une telle API et l'avertissement ne sera pas supprimable.

Si vous êtes particulièrement déterminé, vous pouvez utiliser l'indicateur hautement non documenté javac -XDignore.symbol.file qui compilera votre programme par rapport au rt.jar Interne de Sun plutôt qu'au fichier de symboles accessible au public ct.sym. rt.jar Ne produit pas cet avertissement.

46
John Kugelman

Si vous utilisez maven, vous pourriez être intéressé par l'ajout de ce qui suit à votre pom.xml fichier:

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

voir cette réponse

Impossible d'empêcher ant de générer des avertissements d'API propriétaires du compilateur Sun

Code de test

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

compilation de la ligne de commande

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

ou

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

compilation réussie sans aucun avertissement

supprimez la balise SuppressWarnings et compilez à nouveau

une erreur est alors signalée

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

Référence son interface CachedRowSet pas l'implémentation.

8
Boris Pavlović

J'ai essayé

@SuppressWarnings("all")

mais cela n'a pas fonctionné.

J'ai donc eu recours à une horrible et horrible culpabilité que je ne recommande pas en général, mais dans ce cas spécifique, l'avertissement a disparu. J'ai utilisé la réflexion pour instancier une nouvelle instance de la classe com.Sun.rowset.CachedRowSetImpl.

J'ai remplacé cette ligne, ce qui a provoqué l'avertissement:

    return new CachedRowSetImpl();

avec ce bloc:

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

Veuillez ne pas le faire dans votre propre code sans avoir d'abord envisagé une autre option.

3
Steve McLeod

Essayez l'option javac

-Xlint:none

Si vous compilez à partir d'un IDE, il devrait avoir une option pour désactiver les avertissements.

Cela désactivera TOUS les avertissements qui ne font pas partie de Java Language Specification. Ainsi, par exemple, l'avertissement "non vérifié" ne sera pas bloqué.

0
Jakub Zaverka