2011-12-08 2 views
4

Je suis à la recherche d'un moyen efficace de remplacer une classe du chemin d'accès à la classe d'amorçage, rt.jar. La raison est OpenJDK7 bug http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7104625Substitution de classes uniques à partir de rt.jar

Le correctif de ce bug est un changement de sun.awt.X11.XComponentPeer trivial (voir la liste de diffusion post lié). Donc je me demandais s'il y avait un moyen facile de remplacer juste cette classe affectée sur mon classpath, sans avoir à reconditionner/reconstruire rt.jar (ainsi le correctif n'est pas perdu lors de la prochaine mise à jour automatique d'OpenJDK).

Idéalement, il toucherait aussi Eclipse ...

Je suppose que java -Djava.system.class.loader=myClassLoader fonctionnerait? Existe-t-il un autre moyen de remplacer une classe avec un tel "correctif"? (Note: non utilisé dans mon propre code, mais profond dans Java AWT code)

Répondre

9

Vous pouvez utiliser le paramètre VM -Xbootclasspath/p pour ajouter votre propre fichier JAR avec la classe corrigée au chemin de classe de démarrage.

1

Je crois que la seule façon de faire cela est de "patcher" rt.jar en remplaçant le fichier * .class désiré. 7-Zip peut vous aider à le faire facilement.

C'est exactement ainsi qu'Oracle a fourni son correctif de bogue d'analyse double avec son outil FPUpdater, qui était essentiellement un script qui l'a fait. (Some history.)

0

Je pense que @ziesemer est correct, mais vous pouvez utiliser le chargeur de classe pour remplacer la classe fautive lorsque votre application est en mode d'amorçage. Cela peut être plus clair si vous ne voulez pas vous inquiéter de la mise à jour du JDK en dessous de vous, bien que vous deviez coller ce code du chargeur de classe d'amorçage dans chaque application sur laquelle vous travaillez.

1

Je pense que vous pouvez essayer d'utiliser javaagent Vous devez intercepter l'événement, lorsque la classe de système de charge machine virtuelle Java et échanger à la vôtre

Questions connexes