有时,当我们对网络应用进行细微更改时,例如错误修复,我们不会每次都构建一个全新的WAR文件,而只是替换WEB-INF/classes
下展开的Web应用程序目录中受影响的类文件,然后重新启动应用程序。
可以吗?
答案 0 :(得分:13)
我认为这可能不是最佳做法,因为版本控制:您如何知道已部署的应用程序版本?如果你部署一个.war文件,你的构建过程可以负责更新构建号(来自源代码控制,或者单独,无论如何 - 只要每个构建都有不同的编号就可以了)。
如果你正在使用持续集成(这绝对是一个好主意),那么每次在源代码中进行更改时,你的构建过程都应该开出一个“工件”(war文件)。也许用版本号标记版本控制中的代码。
因此,在部署Web应用程序时,您确切地知道正在运行的版本以及构成该版本的源代码。
通过更新单个.class文件进行小的增量更改我认为除了本地开发人员测试之外的其他任何内容都不是一个好主意。
答案 1 :(得分:2)
您可以使用maven解决部署任务。
每次更改任何内容时,只需输入
即可svn update
mvn clean compile war:exploded tomcat:inplace -P deployment
您的pom.xml文件中包含“部署”配置文件,其中包含部署环境所需的所有配置文件。
通过这种方式,您可以自动执行部署过程,并在手动复制错误/旧/ etc文件时永不失败。
答案 2 :(得分:2)
简短回答:不,仅仅替换修改过的java文件的类文件可能还不够。请继续阅读。
这是我的情景。
要诊断,
这清楚地解释了为什么更换一个课程没有解决问题。在这种情况下,替换第一个.class文件永远不会有效。
经验教训。以下是我对此的总结:
答案 3 :(得分:0)
同意PHill;似乎节省的时间可以忽略不计,潜在的风险很多
答案 4 :(得分:0)
从技术上讲,只要类/方法签名相同,它就应该有效。但正如菲尔指出的那样,这不是世界上最好的主意。
我假设您既不使用Apache Ant也不使用Apache Maven来创建.war文件。我强烈建议您选择一个可以自动创建.war文件的工具,正是为了避免像您所说的那种手动黑客攻击。我个人使用Maven,它负责编译,运行单元测试和打包我的应用程序。好东西:)
答案 5 :(得分:0)
只应在有限的基础上将更新的类文件注入应用程序,并且不应该是构建的标准活动。话虽这么说,我已经看到它在大型应用程序上完成,整个重建/重新打包需要几个小时,并且需要尽快修复错误。希望它有所帮助。