Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jar中修补.class文件_Java_Jar_Monkeypatching - Fatal编程技术网

Java 如何在jar中修补.class文件

Java 如何在jar中修补.class文件,java,jar,monkeypatching,Java,Jar,Monkeypatching,我有一个不能修改的jar文件,但我想用另一个.class文件代替jar的一个成员。当jar中的代码试图加载外部.class文件时,如何告诉Java使用该文件?您需要确保先加载外部.class文件。如果类加载器已加载一个类,则不会重新加载该类。如果您使用的是应用程序服务器,那么有一些方法可以配置为类加载器加载类的首选项。但是如果您使用的是独立的应用程序,那么您可能需要扩展类加载器,以便按照您想要的顺序加载文件。您可以使用完全相同的名称编译另一个jar文件,并将其放在类路径中jar文件的前面。例如,

我有一个不能修改的jar文件,但我想用另一个.class文件代替jar的一个成员。当jar中的代码试图加载外部.class文件时,如何告诉Java使用该文件?

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

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

如果要覆盖
java…
类,可以使用一些命令行选项更改引导类路径。查看中的
-Xbootclasspath
选项。注意警告

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

您可以使用AspectJ插入代码并可能替换它。如果需要,
around
通知可以调用原始代码

您可以查看是否确实需要替换原始代码。一些系统提供定制挂钩