Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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文件?_Java_Jar_Patch_War - Fatal编程技术网

Java 有没有办法修补jar文件?

Java 有没有办法修补jar文件?,java,jar,patch,war,Java,Jar,Patch,War,假设我向某人发送了一个大罐子或war文件。我以后能换一小段给他吗?假设我只是更改了一个类文件。我将的java重新编译到一个类文件中。除了把新的类文件换成旧的类文件,还有什么我必须做的吗 在java中,您必须重建整个jar/war文件吗?另外,是否有一些开源软件包可用于进行更新?您需要重建整个jar文件,除非您希望它们取消归档、覆盖文件并重新jar。了解一下jar命令的用法。选项u允许您更新现有的存档。接收类文件的人可以简单地将该文件添加到jar中,只要他们知道将其放入哪个目录。正如评论中所指出的

假设我向某人发送了一个大罐子或war文件。我以后能换一小段给他吗?假设我只是更改了一个类文件。我将的java重新编译到一个类文件中。除了把新的类文件换成旧的类文件,还有什么我必须做的吗


在java中,您必须重建整个jar/war文件吗?另外,是否有一些开源软件包可用于进行更新?

您需要重建整个jar文件,除非您希望它们取消归档、覆盖文件并重新jar。

了解一下
jar
命令的用法。选项u允许您更新现有的存档。

接收类文件的人可以简单地将该文件添加到jar中,只要他们知道将其放入哪个目录。正如评论中所指出的,对签名的罐子感到厌倦

jar uf foo.jar foo.class

您可以通过这种方式复制修改后的.class文件

jar uf test.jar com\test\Test.class

如果有一种合乎逻辑的方法可以将各个jar文件中的组件分离出来,那么我将为每个组件类型创建一个jar文件。这样,您就不必将所有内容重新分发回客户机。例如,看看组件是如何分离出来的

只需用7zip打开jar文件并覆盖已编辑的类即可。不过,请确保首先进行备份。

如果您有新旧jar文件,您可以创建两者的一个类,并且只将增量文件发送给您的客户机,如果您只更改了多个类中的一个类,那么增量文件应该比整个jar文件小得多。这也适用于签名JAR,但要求发送方和接收方都有xdelta程序(或能够安装该程序)


当然,您必须首先创建新的jar(但这可以通过其他答案中已经提到的方法来实现)。

有一个JARDiff,用于更新Java WebStart应用程序。

是的,jar文件只是zip文件,但是有一个jar实用程序可用于此。它是标准JDK的一部分。我的意思是unjar/jar除了解压/zip之外还有什么特别的功能吗?我相信它会为您创建一个清单,如果您还没有清单的话。我已经回答了。我真的有点震惊,以前没有人处理过这个问题。每个人都只是重建了整个项目吗?谢谢,很多,回答很好,每个人。+1,这通常会起作用,但是要小心以这种方式修改签名的JAR。当你说简单的zip文件时,我有一些疑问。据我所知,jarfiles也有一个清单。@Grae-Sure,但这如何改变压缩与zip相同的事实呢?无论如何,这段信息可能与问题无关,因此我将删除它。jar umf foo.jar foo.class-我在链接中找到了它。我认为这是最好的选择。仅供参考,答案中的链接不再有效。这似乎是同一篇文章:即使我一次只需要更改一个jar文件,这对我的特殊情况也没有帮助,因为所有jar文件都在一个war文件中。@Grae:这取决于清单文件中的内容。它通常不包含任何与jar的不同版本的内容。如果它包含签名信息,您也必须更改它。只需像平常一样用新旧类创建一个jar,并比较清单文件,看看这是否对您有意义。