如何批量部署Maven项目中所有-api结尾的子模块?
批量部署所有-api子模块的可行方案
方案1:修正Maven通配符写法直接匹配
Maven的-pl参数支持Ant风格通配符,你之前的写法有误,改成下面的命令就能直接匹配所有一级目录下的*-api子模块:
mvn -Dmaven.test.skip=true clean deploy -pl */*-api -P test
如果有更深层级的-api模块,把通配符改成**/*-api即可,不过要注意别误匹配到非目标模块。
方案2:用Maven Profile统一管理
在项目根pom.xml里加一个专属Profile,把所有-api模块列进去,后续执行命令更省心:
- 编辑根pom.xml,在
<profiles>节点下添加:
<profile> <id>deploy-api</id> <modules> <module>ProjectA/SubmoduleA-api</module> <module>ProjectB/SubmoduleB-api</module> <!-- 把所有-api模块都加在这里 --> </modules> </profile>
- 之后执行命令:
mvn -Dmaven.test.skip=true clean deploy -P deploy-api,test
这个方案适合模块结构稳定的场景,一次配置终身复用。
方案3:Shell脚本自动收集模块(Linux/macOS)
不想改pom的话,用shell命令自动找出所有-api模块再传给Maven:
mvn -Dmaven.test.skip=true clean deploy -pl $(find . -name "*-api" -type d | grep -v target | tr '\n' ',') -P test
命令里的find会找出所有*-api目录,grep -v target排除构建产生的target目录,最后把换行转成逗号符合Maven的参数格式。
方案4:PowerShell脚本(Windows)
Windows环境下用PowerShell实现自动收集:
$modules = (Get-ChildItem -Directory -Filter *-api | Select-Object -ExpandProperty FullName | ForEach-Object { $_ -replace "^$pwd\\", "" }) -join "," mvn -Dmaven.test.skip=true clean deploy -pl $modules -P test
脚本会遍历当前目录下的*-api子目录,转成相对路径后拼接成逗号分隔的字符串,传给Maven的-pl参数。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

