java - 如何对 jar 中的 .class 文件进行 monkeypatch

标签 java jar monkeypatching

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

最佳答案

您可以使用完全相同名称的替换类编译另一个 jar 文件,并将其放在类路径中 jar 文件的前面。例如,这就是各种 slf4j bridge jar 所做的,用同源 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 建议可以调用原始代码。

你可以看看你是否真的需要替换原来的代码。一些系统提供定制 Hook 。

关于java - 如何对 jar 中的 .class 文件进行 monkeypatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18907202/

相关文章:

java - 为什么打印静态变量值会在静态 block 中给出错误,而分配它却不会

java - Maven Jar Plugin 和 Maven Source Plugin 有什么区别?

ruby - ruby 中的 fixnum 和素数

java - 如何为maven exec :java?配置类路径

java - 为什么我的 Runnable Jar 文件不起作用

python - 猴子从库中修补 python 类方法

python - 猴子修补运算符重载在 Python2 与 Python3 中的行为不同

java - 如何编写 Java 客户端来访问 WSDL 文件?

java - 在 Java 8 中正确使用 URLConnection 和 try-with-resources

java - 两个 java 线程在完全相同的毫秒