一次打包引发的思考,原来maven还可以这么玩~

微信扫一扫,分享到朋友圈

一次打包引发的思考,原来maven还可以这么玩~

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

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

其实玩转 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 | 可选,表示不递归子模块 |

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

别着急,下面通过几个命令理解一下(全部在父工程 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 模块的B C 模块执行 mvn clean install`操作。

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

  1. mvn clean install -N

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

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

总结

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

另外作者的第一本 PDF 书籍已经整理好了,由浅入深的详细介绍了 Mybatis 基础以及底层源码,有需要的朋友公众号回复关键词 Mybatis进阶 即可获取,目录如下:

最新阿里Java后端开发面试题100道(P6-P7)

上一篇

Docker安装Redis,Spring Boot使用Redis,解决Redis发生的类型转换异常

下一篇

你也可能喜欢

一次打包引发的思考,原来maven还可以这么玩~

长按储存图像,分享给朋友