Existe-t-il un moyen de désactiver les restrictions de javac 1.6.0_22 qui m'empêchent d'utiliser des classes internes à JRE comme Sun.awt.event.*
?
Je pas cherche:
Je veux juste savoir si c'est possible ou non, et si c'est comment alors.
J'ai trouvé la réponse moi-même.
Lorsque javac est en train de compiler du code, il ne fait pas le lien avec rt.jar
par défaut . Il utilise plutôt le fichier de symboles spécial lib/ct.sym
avec les stubs de classe.
Étonnamment, ce fichier contient de nombreuses classes internes de Sun, mais pas toutes . Dans mon cas, une de ces classes plus internes que d'habitude était Sun.awt.event.IgnorePaintEvent
.
Et la réponse à ma question est: javac -XDignore.symbol.file
C'est ce que javac utilise pour compiler rt.jar
.
Normalement, cela ne produit qu'un message d'avertissement. par exemple.
[javac] /media/disk/opensso2/opensso/products/federation/openfm/source/com/Sun/identity/wss/xmlsig/WSSSignatureProvider.Java:46: warning: com.Sun.org.Apache.xpath.internal.XPathAPI is Sun proprietary API and may be removed in a future release
[javac] import com.Sun.org.Apache.xpath.internal.XPathAPI;
Vous avez peut-être demandé au compilateur Java de traiter les avertissements comme des erreurs.
Il y a une meilleure solution. Ajoutez d’abord l’option javac -XDenableSunApiLintControl
, puis utilisez @SupressWarnings("sunapi")
dans votre code.