持续原创输出,点击上方蓝字关注我

目录

  • 前言
  • 依赖关系
  • 你会怎么做?
  • 必知的几个参数
  • 总结

前言

昨天有一个读者找我的交流工作心得,偶然间提到一个有趣的问题,如下:

「大致的意思」:公司最近在整多模块开发,由于模块之间相互依赖,每次打包都很烦,必须根据依赖关系逐一进行打包,有没有省事的办法呢?

其实玩转Maven的朋友都知道,只需要一条命令即可解决问题。

依赖关系

假设有一个多模块项目,父工程P中含有三个子模块ABC,三个模块有如下的依赖关系:

  1. A 依赖 BC
  2. B 依赖 C

依赖关系图

父工程Ppom.xml如下:

.....
<modules>
<module>A</module>
<module>B</module>
<module>C</module>
</modules>
.....

A模块的pom.xml如下:

....
<dependency>
<groupId>xxx.xxxx</groupId>
<artifactId>B</artifactId>
<version>xxxx</version>
</dependency>
.....

B模块的pom.xml如下:

....
<dependency>
<groupId>xxx.xxxx</groupId>
<artifactId>C</artifactId>
<version>xxxx</version>
</dependency>
.....

C模块的pom.xml如下:

....

你会怎么做?

现在产品需要上线项目A,你该如何打包?

最容易想到的则是分开打包,分别执行如下的命令:

mvn clean install C
mvn clean install B
mvn clean package A

以上三个模块轮流打包,至少需要五分钟以上吧,你不慌吗?


慌的一批

重点来了,我只需要如下一条命令即可打包完成:

mvn clean package -pl A -am -P test -DskipTests=true

以上命令有什么高深的吗?-P指定环境,-DskipTests=true跳过测试,但是-pl-am是什么?

答案肯定是在-pl-am这两个参数了。

必知的几个参数

从以上的例子中可以知道重要的就是-pl-am这两个参数,那么是什么意思呢?如下:

参数 说明
-pl 可选,指定需要处理的工程,多个使用英文逗号分隔,取值是artifactId
-am 可选,同时处理 pl参数 指定模块的依赖模块
-amd 可选,同时处理依赖于 pl参数 指定模块的模块
-N 可选,表示不递归子模块

怎么样,理解了吗?是不是有点晦涩难懂,哈哈....


what?

别着急,下面通过几个命令理解一下(全部在父工程P的根目录下执行)。

  1. mvn clean install -pl A -am

对父工程P、子模块A以及A模块依赖的BC模块执行mvn clean install操作。

这个命令执行成功后,可以看到PABC四个模块全部安装到本地了。

  1. mvn clean install -pl C -am

对父工程P、子模块C模块执行mvn clean install操作。

这个命令执行成功后,可以看到PC两个模块安装到本地。

由于C模块「不依赖」其他的两个子模块,因此AB模块不会执行相关命令。

  1. mvn clean install -pl C -amd

对父工程P、子模块C以及依赖于C模块的BC模块执行mvn clean install`操作。

这个命令执行成功后,可以看到PABC四个模块全部安装到本地了。

  1. mvn clean install -N

只会打包父工程P,它的子模块将不会执行相关操作。

怎么样?通过以上的命令应该理解了吧。

总结

随着项目的体量逐渐增长,可不止上面的几个模块,学会以上几个命令,提升的效率可不止一倍啊。

最新文章

  1. SqlServer数据库空间使用情况常用命令
  2. Caused by: java.lang.NoClassDefFoundError:
  3. gitlab 无法查看提交的文件Errno::ENOMEM (Cannot allocate memory - /opt/gitlab/embedded/bin/git):
  4. __weak
  5. wpa_supplicant.conf
  6. Java执行main方法,异常为:could not find the main class.program will exit
  7. [POJ 3150] Cellular Automaton (矩阵高速幂 + 矩阵乘法优化)
  8. 一种数据与逻辑分离的Python单元测试工具
  9. 『片段』ShellHelper 控制台程序 的 程序调用(支持输入命令得到返回字符串输出)
  10. JSON.stringify()的不常见用法
  11. 全排列 permutation
  12. Java_oracle超出打开游标的最大数的原因和解决方案
  13. leetcode5
  14. T-SQL :联接查询练习 (杂)
  15. js timeout
  16. 完整的REM布局的工作流程与规范
  17. GIS-005-Dojo &amp; jQuery 事件处理
  18. vue.js中引入图片
  19. perf + 火焰图用法 小结
  20. Arduino I2C + 三轴加速度计ADXL345

热门文章

  1. 联赛模拟测试10 C. 射手座之日
  2. python文档下载
  3. MATLAB鼠标事件
  4. Eclipse 设置Tab键为4个空格
  5. JAVA学习线路:day01面向对象(继承、抽象类)
  6. CPU 执行程序的秘密,藏在了这 15 张图里
  7. ORA-00017: session requested to set trace event 请求会话以设置跟踪事件
  8. 6.Android-五大布局
  9. 数据库SQL Server 2016“功能选择”详细说明及精简安装选择
  10. Redis6 安装