web-dev-qa-db-fra.com

Utilisation de classes Sun internes avec javac

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:

  1. une explication pourquoi c'est interdit.
  2. suggestion d'utiliser différentes classes
  3. suggestion d'utiliser la réflexion
  4. suggestion d'utiliser ecj/Eclipse

Je veux juste savoir si c'est possible ou non, et si c'est comment alors.

47
Marcin Wisnicki

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.

84
Marcin Wisnicki

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.

0
Stephen C

Il y a une meilleure solution. Ajoutez d’abord l’option javac -XDenableSunApiLintControl, puis utilisez @SupressWarnings("sunapi") dans votre code.

0
juancn