- 前言
- 依赖关系
- 你会怎么做?
- 必知的几个参数
- 总结
昨天有一个读者找我的交流工作心得,偶然间提到一个有趣的问题,如下:
「 大致的意思」:公司最近在整 多模块
开发,由于模块之间相互依赖,每次打包都很烦,必须根据依赖关系逐一进行打包,有没有省事的办法呢?
其实玩转 Maven
的朋友都知道,只需要一条命令即可解决问题。
依赖关系
假设有一个多模块项目,父工程 P
中含有三个子模块 A
、 B
、 C
,三个模块有如下的依赖关系:
父工程 P
的 pom.xml
如下:
.....
<span><span class="hljs-tag"><<span class="hljs-name">modules</span>></span>
<span> <span class="hljs-tag"><<span class="hljs-name">module</span>></span>A<span class="hljs-tag">module</span>></span>
<span> <span class="hljs-tag"><<span class="hljs-name">module</span>></span>B<span class="hljs-tag">module</span>></span>
<span> <span class="hljs-tag"><<span class="hljs-name">module</span>></span>C<span class="hljs-tag">module</span>></span>
<span><span class="hljs-tag">modules</span>></span>
<span>.....
</span></span>
A
模块的 pom.xml
如下:
....
<span><span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span> <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>xxx.xxxx<span class="hljs-tag">groupId</span>></span>
<span> <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>B<span class="hljs-tag">artifactId</span>></span>
<span> <span class="hljs-tag"><<span class="hljs-name">version</span>></span>xxxx<span class="hljs-tag">version</span>></span>
<span><span class="hljs-tag">dependency</span>></span>
<span>.....
</span></span>
B
模块的 pom.xml
如下:
....
<span><span class="hljs-tag"><<span class="hljs-name">dependency</span>></span>
<span> <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>xxx.xxxx<span class="hljs-tag">groupId</span>></span>
<span> <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>C<span class="hljs-tag">artifactId</span>></span>
<span> <span class="hljs-tag"><<span class="hljs-name">version</span>></span>xxxx<span class="hljs-tag">version</span>></span>
<span><span class="hljs-tag">dependency</span>></span>
<span>.....
</span></span>
C
模块的 pom.xml
如下:
....
你会怎么做?
现在产品需要上线项目 A
,你该如何打包?
最容易想到的则是分开打包,分别执行如下的命令:
mvn clean install C
<span>mvn clean install B
<span>mvn clean package A
</span></span>
以上三个模块轮流打包,至少需要五分钟以上吧,你不慌吗?
重点来了,我只需要如下一条命令即可打包完成:
mvn clean package -pl A -am -P test -DskipTests=true
以上命令有什么高深的吗? -P
指定环境, -DskipTests=true
跳过测试,但是 -pl
和 -am
是什么?
答案肯定是在 -pl
和 -am
这两个参数了。
必知的几个参数
从以上的例子中可以知道重要的就是 -pl
和 -am
这两个参数,那么是什么意思呢?如下:
怎么样,理解了吗?是不是有点晦涩难懂,哈哈….
别着急,下面通过几个命令理解一下(全部在父工程 P
的根目录下执行)。
对父工程 P
、子模块 A
以及 A
模块依赖的 B
、 C
模块执行 mvn clean install
操作。
这个命令执行成功后,可以看到 P
、 A
、 B
、 C
四个模块全部安装到本地了。
对父工程 P
、子模块 C
模块执行 mvn clean install
操作。
这个命令执行成功后,可以看到 P
、 C
两个模块安装到本地。
由于
C
模块 「 不依赖」其他的两个子模块,因此A
、B
模块不会执行相关命令。
对父工程 P
、子模块 C
以及依赖于 C
模块的B 、
C 模块执行
mvn clean install`操作。
这个命令执行成功后,可以看到 P
、 A
、 B
、 C
四个模块全部安装到本地了。
只会打包父工程 P
,它的子模块将不会执行相关操作。
怎么样?通过以上的命令应该理解了吧。
随着项目的体量逐渐增长,可不止上面的几个模块,学会以上几个命令,提升的效率可不止一倍啊。
Original: https://www.cnblogs.com/Chenjiabing/p/13947674.html
Author: 爱撒谎的男孩
Title: 一次打包引发的思考,原来maven还能这么玩?
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/610877/
转载文章受原作者版权保护。转载请注明原作者出处!