【问题标题】:How to patch a Java program?如何修补 Java 程序?
【发布时间】:2013-07-10 00:40:18
【问题描述】:

最近我对 Java 桌面应用程序进行了修复。我通过更改我的一个类中的代码、编译它并将新的 jar 发送到生产环境来做到这一点。

我现在被问到是否可以通过复制我修复的编译类来修补生产中的 jar,或者甚至创建一个能够仅更新修改后的文件的修补程序/脚本。

附加信息:

  1. 补丁不必在运行时应用。这意味着补丁可以作为单独的程序或活动来完成。我的旧程序不需要自动更新。
  2. Web 应用程序(WAR 文件)也可以做到这一点吗?

我想出的最佳答案是这个,但它已经 2 岁了。 Patching Java software

我的要求很少吗?我从未见过修补 Java 应用程序的教程。

【问题讨论】:

  • 这个问题似乎是题外话,因为它是关于基础设施 - 更适合程序员或服务器故障

标签: java jar war auto-update


【解决方案1】:

我现在被问到是否可以通过复制我修复的编译类来修补生产中的 jar,或者甚至创建一个能够仅更新修改后的文件的修补程序/脚本。

是的。可以使用jar -u 修补 JAR 文件。也可以用相同的方式修补 WAR 文件。

但我不会推荐它。 JAR 或 WAR 文件应该是部署/管理的单元。如果您开始在生产服务器上修补 JAR / WAR 文件,则很难跟踪实际在哪里使用了什么。如果您不小心,就会出现混乱和混乱。

唯一无法避免修补的情况是您有一个 3rd-party 库或您无法从源代码构建的东西,但您仍然需要修改。但即使在这种情况下,最好在您的构建平台上修改 JAR / WAR 并部署修改后的 JAR / WAR。尝试在生产平台上修补 JAR、WAR 或部署的 web 应用程序是个坏主意。


我的要求很少吗?

是的。有更好的方法...

我从未见过修补 Java 应用程序的教程。

并不奇怪,因为有更好的方法......

【讨论】:

  • 感谢您的回答。正如我在重新部署经过测试的 Jar/War 时所说的那样,这是我通常所做的。这是我们安全和标准部门的一项要求,我很高兴不是唯一一个觉得这个要求很奇怪的人。
  • @JefreyValencia - 我很想用“为我们提供修补和正确测试的 JAR”来回击。我也很想知道他们需要你修补什么。这一切听起来有点奇怪..,.
  • 您好,Stephen,安全和标准团队或多或少只是试图监控我们对已经投入生产的应用程序所做的更改。他们给出的示例之一(简化/改写)是,如果 Windows 操作系统中存在错误,您只需修补它而不是重新安装应用程序。这个论点是有道理的,但以我有限的经验,我不知道这对于 java 应用程序是否可行甚至是好的做法。
  • 我明白了。那么,当您将新版本部署到生产系统时,他们会做什么?他们如何处理他们希望您提供的这些(二进制)补丁?反编译它们?在我看来,S&S 团队中的某些管理类型创建了一个“流程”,而没有考虑它是否真正实现了任何目标。
【解决方案2】:

你可以通过jar uf jarfile classfile(s)更新旧的jar

这会将具有相同名称的旧类文件替换为新的类文件,使用它做一个自动修补程序应该不难

【讨论】:

  • 感谢您的回答,刚刚选择了斯蒂芬回答,因为他还添加了其他信息。
【解决方案3】:

对于部署 Java 桌面应用程序,最好的选择通常是安装该应用程序。使用Java Web Start。 JWS 适用于 Windows、OS X 和 *nix。它包括自动更新。

这也可以通过 Web 应用程序(WAR 文件)来完成吗?

没有。 JWS 适用于桌面应用程序。仅限。

【讨论】:

  • 感谢您的回答。我们可能会在未来的桌面应用程序上尝试这样做
【解决方案4】:

看看Getdown——它旨在提供一个系统,用于在用户的机器上下载和安装文件集合,并根据需要升级这些文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2011-07-26
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多