【问题标题】:Overriding single classes from rt.jar从 rt.jar 覆盖单个类
【发布时间】:2011-12-08 15:05:32
【问题描述】:

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

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

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

我认为java -Djava.system.class.loader=myClassLoader 会起作用吗?有没有其他方法可以用这样的“修补程序”覆盖单个类? (注:在我自己的代码中没有使用,而是深入Java AWT代码)

【问题讨论】:

    标签: java classloader java-7


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      这正是 Oracle 使用其 FPUpdater 工具提供双重解析错误修复的方式,该工具本质上是一个执行此操作的脚本。 (Some history.)

      【讨论】:

        【解决方案3】:

        我觉得你可以试试javaagent 当 JVM 加载系统类并将其交换到您的时,您必须拦截事件

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-03-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-06
            • 1970-01-01
            相关资源
            最近更新 更多