2008-10-21 113 views

回答

13

我会说,可能不是最好的做法,因为版本的:你怎么知道你有部署该应用程序的版本?如果你部署了一个.war文件,你的构建过程可以负责更新内部版本号(从源​​代码控制,或者分开,无论 - 只要每个版本有不同的数字就可以)。

如果你使用持续集成(这绝对是一个好主意,),那么你的构建过程应该踢出来的“神器”(war文件)每次做出修改源代码。也可能使用内部版本号在版本控制中标记代码。

所以,当您部署Web应用程序,你确切地知道哪个版本正在运行,并且其源代码,弥补了该版本。

通过更新个别.class文件我想说作小的增量变化可能对除本地开发人员测试以外的任何一个好主意。

0

同意PHILL;看起来节省的时间可以忽略不计,潜在风险很大

2

您可以使用maven解决您的部署任务。

你改变什么,每次,只要输入

svn update 
mvn clean compile war:exploded tomcat:inplace -P deployment 

你在你的pom.xml文件“部署”的个人资料,包括所需要的部署环境中的所有configuraiton。

通过这种方式,您可以事件自动执行部署过程,并且在手动复制错误/旧/ etc文件时决不会失败。

0

从技术上讲,只要类/方法签名是相同的,它应该可以工作。但正如Phill指出的那样,这不是世界上最好的想法。

我假设你正在使用Apache Ant也不Apache Maven,无论是来创建.war文件。我强烈建议您选择一个可以自动创建.war文件的工具,这样可以避免像您所说的那样的手动黑客攻击。我个人使用Maven,它负责编译,运行单元测试和打包我的应用程序。好东西:)

0

注入更新的类文件到应用程序只能在有限的基础上进行,不应该是一个建立规范的活动。这就是说,我已经看到它在大型应用程序上完成,整个重建/重新打包需要几个小时,并且需要尽快修复错误。希望能帮助到你。

2

@Phill Sacre等涵盖了这个问题的大部分方面。我面对一个不同的方面,并希望作出贡献。

简短回答:不,它可能不足以替换修改后的java文件的类文件。详情请阅读。

这是我的场景。

  • 我有一个主要包含SQL查询的.java。我修改了一个查询,将新的.class文件和反弹的Tomcat(未连接到我的IDE)。前一个查询仍在执行中。
  • 当我替换所有的.class文件时,新的查询正在执行。

诊断,

  • 我带着两个Maven的建立和执行的目录进行比较。
  • 令我惊讶的是,我发现2 .class文件,而不是1,被修改。
    • 这个额外的.class文件实际上是使用我修改的.class文件。
  • 当我看到额外的.class文件的反编译的版本,我的SQL查询(一个字符串)在那里为内嵌

这清楚地解释了为什么更换一个类没有解决问题。在这种情况下,替换第一个.class文件永远不会有效。

经验教训。以下是我如何总结我的学习:

  • 在开发期间,IDE(我使用Eclipse)负责热部署。
  • 在生产系统上,假设只替换一个.class文件就不够明智。应该考虑完整的部署。
相关问题