【问题标题】:How to monkeypatch a .class file in a jar如何对 jar 中的 .class 文件进行猴子补丁
【发布时间】:2023-03-03 06:15:24
【问题描述】:

我有一个无法修改的 jar 文件,但我想使用不同的 .class 文件来代替 jar 的一个成员。当 jar 中的代码尝试加载外部 .class 文件时,如何告诉 Java 使用它?

【问题讨论】:

    标签: java jar monkeypatching


    【解决方案1】:

    您可以编译另一个具有完全相同名称的替换类的 jar 文件,并将其放在类路径中 jar 文件的前面。例如,这是各种slf4j 桥罐所做的,以用同源 slf4j 代码替换库代码中对 log4j 或 Jakarta Commons Logging 的调用;不需要这样维护两套日志系统和配置。

    如果要覆盖java... 类,可以使用一些命令行选项来更改引导类路径。查看http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html 中的-Xbootclasspath 选项。注意警告。

    如果您需要升级 Sun 使用的第三方 jar,还有 lib/endorsed 目录。 Oracle 使用其他组织的 XML 和 CORBA 库;如果他们发布了新版本并且您需要采用它,您可以。

    您可以使用 AspectJ 来检测代码并可能替换它。如果需要,around 建议可以调用原始代码。

    你可以看看你是否真的需要替换原始代码。一些系统提供自定义挂钩。

    【讨论】:

      【解决方案2】:

      您需要确保首先加载外部 .class 文件。如果类加载器已经加载了一个类,那么它将不会被重新加载。如果您使用的是应用程序服务器,那么有一些方法可以为类加载器配置加载类的首选项。但是,如果您使用的是独立应用程序,那么您可能需要扩展类加载器以按照您想要的顺序加载文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-25
        • 1970-01-01
        • 2013-12-28
        • 2019-08-06
        • 2011-04-19
        • 2011-10-06
        相关资源
        最近更新 更多