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

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

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

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

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

依赖关系

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

父工程 Ppom.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模块依赖的 BC模块执行 mvn clean install操作。

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

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

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

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

对父工程 P、子模块 C以及依赖于 C模块的B &#x3001;C &#x6A21;&#x5757;&#x6267;&#x884C;mvn clean install`操作。

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

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

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

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

Original: https://www.cnblogs.com/Chenjiabing/p/13947674.html
Author: 爱撒谎的男孩
Title: 一次打包引发的思考,原来maven还能这么玩?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/610877/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球