覆盖rt.jar中的单个类

我正在寻找一种巧妙的方法来覆盖引导类路径rt.jar类。 原因是OpenJDK7错误http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7104625

修复此错误是一个微不足道的(请参阅链接邮件列表post)更改为sun.awt.X11.XComponentPeer 。 所以我想知道是否有一种简单的方法可以在我的类路径上覆盖这个受影响的类,而不必重新打包/重建rt.jar(因此修复不会在下一次自动更新OpenJDK时丢失)。

理想情况下,它也会影响Eclipse ……

我假设java -Djava.system.class.loader=myClassLoader可以工作吗? 有没有其他方法可以使用这样的“修补程序”覆盖单个类? (注意:在我自己的代码中没有使用,但在Java AWT代码中很深)

您可以使用VM参数-Xbootclasspath/p将您自己的JAR文件与修补的类一起添加到引导类路径。

我相信唯一支持的方法是通过替换所需的* .class文件来“修补”rt.jar。 7-Zip可以帮助您轻松完成此操作。

这正是Oracle用他们的FPUpdater工具提供他们的双解析错误修复的原因,这个工具本质上就是一个脚本。 ( 有些历史 。)

我认为您可以尝试使用javaagent当JVM加载系统类并将其交换到您的系统类时,您必须拦截事件

我认为@ziesemer是正确的,但是当你的应用程序引导时,你可以使用类加载器来替换有问题的类。 如果你不想担心你下面的JDK更新,这可能会更清晰,尽管你必须将这个bootstrapping类加载器代码粘贴到你正在处理的每个应用程序中。