【问题标题】:How to inject compile classes in existing jar?如何在现有 jar 中注入编译类?
【发布时间】:2011-03-11 23:19:34
【问题描述】:

我需要修补生产中的系统,但是我已经更改了 CVS 中的主干。由于有很多更改,我不想将代码恢复到以前的版本,因为只涉及一个类。

这样可以吗?

  1. 停止应用程序。
  2. 安全地将已编辑的 *.class 替换为现有 jar。
  3. 重新启动应用程序。

非常感谢

【问题讨论】:

  • 你不能在你的类路径的开头添加一个补丁目录并将类添加到那个目录。这意味着您不需要更改当前版本(要恢复更改,只需删除文件)

标签: java jar cvs compilation production


【解决方案1】:

除非罐子是由其他人签名的,否则可以这样做。 jar 文件毕竟只是 zip 文件,您解压缩它们,替换文件并再次压缩它们。如果罐子已签名并且您拥有密钥,则必须再次签署新罐子。 (jar 命令是执行此操作的首选方式。)

但是,这样做是非常糟糕的做法。相信我,如果这种部署方式成为一种习惯,您现在节省的工作量将会减少一百倍。除非发生真正的危机(例如,您的应用程序甚至没有运行或每十分钟崩溃一次),否则您永远不应该这样做。

如果您使用 CVS,您应该始终标记您的发布,但即使您没有这样做,您也可以检查发布日期的主干,从那里创建一个分支,将更改应用到分支并重建您的应用程序。

大约需要十分钟(加上编译时间),这是一种安全且正确的方法。您可以在测试环境中启动已修补的应用程序,测试它是否可以工作,然后再进行部署。

在现有应用程序中删除预编译的类文件可能会以微妙的方式破坏代码,直到几天后才会显现出来。重新编译和重新测试应用程序可以消除这种风险,只留下与任何代码更改相关的小得多的风险。

【讨论】:

    【解决方案2】:

    是的,你完全可以。确保您的新类编译良好,然后更新 jar。 jar -u 就是你要找的。​​p>

    【讨论】:

      猜你喜欢
      • 2017-10-06
      • 2014-10-08
      • 1970-01-01
      • 2019-11-22
      • 2017-03-15
      • 2020-04-15
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多