You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven多模块项目如何仅构建指定子模块且不影响其他运行模块?

解决方案

1. 仅构建已变更的子模块(如child)

当只有child模块代码变更、common模块无改动时,按以下步骤操作:

  • 先确保common模块已安装到本地Maven仓库(如果之前完整构建过项目,该模块一般已存在;若不确定,可先执行一次 mvn install -pl common)
  • 直接执行构建命令:
    mvn clean package -pl child
    
    若common是快照版本(SNAPSHOT),Maven默认会尝试从远程仓库拉取最新快照,可能引发依赖解析问题,此时可加上离线模式参数强制使用本地仓库版本:
    mvn clean package -pl child -o
    
    这种方式只会构建child模块,不会改动common模块,也就不会影响正在运行的friend应用。

2. 当被依赖模块(如common)变更时,构建所有依赖它的模块

如果common模块代码有改动,需要同步构建所有依赖它的child和friend模块,使用-amd(--also-make-dependents)参数——它会构建指定模块,以及所有依赖该模块的下游模块:

mvn clean package -pl common -amd

这条命令会自动构建common、child、friend三个模块,确保所有依赖common的模块都使用最新版本。

关键参数说明

  • -pl <模块名>:指定要构建的模块,多个模块可用逗号分隔(如-pl child,friend)
  • -am:构建指定模块的所有上游依赖模块(即该模块依赖的其他模块)
  • -amd:构建所有依赖指定模块的下游模块(即依赖该模块的其他模块)
  • -o:离线模式,强制Maven仅使用本地仓库的依赖,不远程拉取

运行中应用的风险说明

Unix系统中运行的应用若依赖的Jar文件被替换,确实可能出现类加载异常等问题。但只要在common模块未变更时,不执行会重新构建common的命令(比如不要加-am),就不会更新本地仓库的common Jar,正在运行的friend应用就不会受影响。如果common必须变更,依赖它的friend应用需要重启才能加载新Jar,这属于应用运行层面的问题,Maven无法直接解决,建议结合热部署或灰度发布流程降低影响。

内容的提问来源于stack exchange,提问作者koreanDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:00:49