如何在现有的jar中注入编译类?

时间:2011-03-11 23:19:35

标签: java jar cvs compilation production

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

可以这样做吗?

  1. 停止申请。
  2. 将已编辑的* .class安全地替换为现有的jar。
  3. 重新启动该应用程序。
  4. 非常感谢

2 个答案:

答案 0 :(得分:4)

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

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

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

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

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

答案 1 :(得分:0)

是的,你很好。确保你的新类编译正常,然后更新jar。 jar -u是您正在寻找的。