java - 如何给 Java 程序打补丁?

标签 java jar war auto-update

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

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

附加信息:

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

我想出的最佳答案是这个,但它已有 2 年历史了。 Patching Java software

我的需求很少见吗?我从未见过给 Java 应用程序打补丁的教程。

最佳答案

I'm now asked if it is possible to just patch the jar in production by just copying the compiled class that I fixed, or even create a patching program/script that will be able to update just the modified files.

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

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

唯一无法避免打补丁的情况是您有第 3 方库或无法从源代码构建的东西,但您仍然需要进行修改。但即使在那种情况下,最好还是在您的构建平台上修改 JAR/WAR 并部署修改后的 JAR/WAR。尝试在生产平台上修补 JAR、WAR 或已部署的网络应用程序是个坏主意。


Is my requirement rare?

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

I have never seen a tutorial to patch a Java application.

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

关于java - 如何给 Java 程序打补丁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17560635/

相关文章:

java - 如何在 Spring Boot 测试中设置 servlet 上下文路径?

java - 带有欢迎文件的嵌入式 Jetty REST 服务

java - 弹力城堡 DefaultSignatureAlgorithmIdentifierFinder NoSuchFieldError : gostR3410_94

尽管提供了 jar 文件,但未找到 java 类

java - 如何在 ubuntu 中运行一个有很多 jars 依赖的 java 文件

java - Eclipse 崩溃 : "An error has occurred. See the log file"

java - 为什么 java.lang.NoSuchMethodError occure 非常特定于环境或类加载器?

java - Tomcat 在所有新部署的 WAR 文件上报告 404 错误?

java - EAR 中的 WAR 中的 NoClassDefFoundError

java - 将 Java 项目库转换为动态 Web 项目