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.
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.
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>
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
Référence son interface CachedRowSet pas l'implémentation.
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.
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é.