一次打包引发的思考,原来maven还能这么玩?

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

目录

前言

依赖关系

你会怎么做?

必知的几个参数

总结

前言

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

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

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

依赖关系

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

A 依赖 B、C。

B 依赖 C。

依赖关系图

依赖关系图

父工程P的pom.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?

what?

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

mvn clean install -pl A -am

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgpxy.html