在Jenkins中使用Maven部署时是否会自动执行Undeploy?
关于Maven部署时自动Undeploy的疑问解答
你观察到的现象完全正常——大部分Maven部署相关的插件(比如针对Java EE容器的maven-ear-plugin、maven-war-plugin,或是容器专属插件如WildFly/Tomcat的Maven插件),在执行deploy目标时默认会自动处理旧版本应用的卸载(undeploy),不需要你手动单独执行undeploy命令。
具体的机制大概分这几种情况:
- 同名同版本的自动覆盖:如果你的应用包(EAR/WAR/EJB)的
artifactId和version和容器中已部署的应用完全一致,插件在部署前会先检测容器内的已部署应用列表。一旦发现匹配的应用,就会自动触发undeploy操作,卸载旧包后再部署新的构建产物。 - 容器层面的热部署支持:像WildFly、Tomcat这类主流Java EE容器本身就支持应用的热更新,Maven插件会调用容器提供的管理API,发送应用更新请求。容器内部会自动完成旧应用的停止、卸载,再加载新应用的整个流程,这个过程对使用者是完全透明的。
- 可定制的执行流程:当然如果你需要更精细的控制(比如先undeploy再deploy,或者只undeploy不部署),也可以在
pom.xml里显式配置插件的执行目标,但默认情况下插件已经帮你封装好了“卸载旧版+部署新版”的完整流程。
结合你的操作场景来看:你修改代码后重新构建的是版本号为1.0的同版本应用,Maven部署插件检测到容器里已经存在TestMavenJenkins-ear(以及关联的web/ejb模块)的1.0版本,就自动完成了旧版本的卸载和新版本的部署,所以你刷新页面就能直接看到更新后的内容。
如果之后你把版本号改成1.1,有些容器会允许同时存在不同版本的应用(取决于容器的配置),但默认插件还是会根据配置处理旧版本的替换或共存逻辑。
另外你可以去查看Jenkins的构建日志,里面应该能找到类似Undeploying application...或者Replacing existing application...的日志条目,这就是插件自动执行undeploy的直接证据。
内容的提问来源于stack exchange,提问作者ziMtyth
相关产品推荐
相关产品推荐

