有时,当我们对我们的网络应用程序进行小的修改时,例如错误修复,我们不会每次构建一个全新的WAR文件,而只是替换WEB-INF/classes
下分解的Web应用程序目录中受影响的类文件并重新启动应用程序。通过替换单个类文件更新Java Web应用程序可以吗?
那好吗?
有时,当我们对我们的网络应用程序进行小的修改时,例如错误修复,我们不会每次构建一个全新的WAR文件,而只是替换WEB-INF/classes
下分解的Web应用程序目录中受影响的类文件并重新启动应用程序。通过替换单个类文件更新Java Web应用程序可以吗?
那好吗?
我会说,可能不是最好的做法,因为版本的:你怎么知道你有部署该应用程序的版本?如果你部署了一个.war文件,你的构建过程可以负责更新内部版本号(从源代码控制,或者分开,无论 - 只要每个版本有不同的数字就可以)。
如果你使用持续集成(这绝对是一个好主意,),那么你的构建过程应该踢出来的“神器”(war文件)每次做出修改源代码。也可能使用内部版本号在版本控制中标记代码。
所以,当您部署Web应用程序,你确切地知道哪个版本正在运行,并且其源代码,弥补了该版本。
通过更新个别.class文件我想说作小的增量变化可能对除本地开发人员测试以外的任何一个好主意。
同意PHILL;看起来节省的时间可以忽略不计,潜在风险很大
您可以使用maven解决您的部署任务。
你改变什么,每次,只要输入
svn update
mvn clean compile war:exploded tomcat:inplace -P deployment
你在你的pom.xml文件“部署”的个人资料,包括所需要的部署环境中的所有configuraiton。
通过这种方式,您可以事件自动执行部署过程,并且在手动复制错误/旧/ etc文件时决不会失败。
从技术上讲,只要类/方法签名是相同的,它应该可以工作。但正如Phill指出的那样,这不是世界上最好的想法。
我假设你正在使用Apache Ant也不Apache Maven,无论是来创建.war文件。我强烈建议您选择一个可以自动创建.war文件的工具,这样可以避免像您所说的那样的手动黑客攻击。我个人使用Maven,它负责编译,运行单元测试和打包我的应用程序。好东西:)
注入更新的类文件到应用程序只能在有限的基础上进行,不应该是一个建立规范的活动。这就是说,我已经看到它在大型应用程序上完成,整个重建/重新打包需要几个小时,并且需要尽快修复错误。希望能帮助到你。
@Phill Sacre等涵盖了这个问题的大部分方面。我面对一个不同的方面,并希望作出贡献。
简短回答:不,它可能不足以替换修改后的java文件的类文件。详情请阅读。
这是我的场景。
诊断,
这清楚地解释了为什么更换一个类没有解决问题。在这种情况下,替换第一个.class文件永远不会有效。
经验教训。以下是我如何总结我的学习: