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

目录

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

前言

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

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

其实玩转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,它的子模块将不会执行相关操作。

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

总结

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

一次打包引发的思考,原来maven还能这么玩?的更多相关文章

  1. Spring之LoadTimeWeaver——一个需求引发的思考---转

    原文地址:http://www.myexception.cn/software-architecture-design/602651.html Spring之LoadTimeWeaver——一个需求引 ...

  2. 一次composer错误使用引发的思考

    一次composer错误使用引发的思考 这个思考源自于一个事故.让我对版本依赖重新思考了一下. 事故现象 一个线上的管理后台,一个使用laravel搭建的管理后台,之前在线上跑的好好的,今天comop ...

  3. 走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven

    小李的Build之路(上) 转自: 刘欣 码农翻身 2016-07-10 摘要:手工Build的烦恼要不是为了和女朋友留在一个城市,小李肯定去北上广奋斗去了.现在他只能留在这个2.5线城市,进入这家软 ...

  4. 由SecureCRT引发的思考和学习

    由SecureCRT引发的思考和学习 http://mp.weixin.qq.com/s?__biz=MzAxOTAzMDEwMA==&mid=2652500597&idx=1& ...

  5. 解决一道leetcode算法题的曲折过程及引发的思考

    写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...

  6. 【思考】由安装zabbix至排障php一系列引发的思考

    [思考]由安装zabbix至排障php一系列引发的思考 linux的知识点林立众多,很有可能你在排查一个故障的时候就得用到另一门技术的知识: 由于linux本身的应用依赖的库和其它环境环环相扣,但又没 ...

  7. 由<a href = "#" > 引发的思考

    原文:由<a href = "#" > 引发的思考 前阵子在一个移动项目中,通过 <a href = "#" >  的方式 绑定clic ...

  8. 曲演杂坛--一条DELETE引发的思考

    原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID ,) PRIMARY KEY, D ...

  9. class_copyIvarList方法获取实例变量问题引发的思考

    在runtime.h中,你可以通过其中的一个方法来获取实例变量,那就是class_copyIvarList方法,具体的实现如下: - (NSArray *)ivarArray:(Class)cls { ...

随机推荐

  1. 038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结

    038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结 本文知识点:案例演示switch结构并对sw ...

  2. Matlab中加汉明窗 ahmming 作用

    转自:http://www.cnblogs.com/lxy2017/p/4049124.html 1.什么是汉明窗? 语音信号一般在10ms到30ms之间,我们可以把它看成是平稳的.为了处理语音信号, ...

  3. 三、Requests库的使用

    requests 的底层实现其实就是 urllib3 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 学过关于urllib库的使用,你会发现它是很不方便的.而R ...

  4. python中remove函数的坑

    摘要:对于python中的remove()函数,官方文档的解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值的第一个匹配的元素. 常见用法: a ...

  5. 磁盘 IOPS(每秒读写次数) 的计算方法

    一.磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出.操作系统从上层到底层,各个层次之间均存在 I/O.比如,CPU 有 I/O,内存有 I/O, VMM 有 I/O, 底层磁盘上也有 ...

  6. 使用appium后安卓手机无法调出键盘解决方法

    问题:用appium进行真机调试后,使用手机的app进行输入时无法调出键盘. 原因:appium调试时,将手机输入法设置成了Unicode IME 解决方法: 方法一,手机设置里修改输入法: 不同的手 ...

  7. h5的第一份翻译

    <!DOCTYPE html>DOCTYPE DOC文本文档documentTYPE 类型html hyper超,超级的:text文本:markup标记:language语言<htm ...

  8. pytest框架: fixture之conftest.py

    原文地址:https://blog.csdn.net/BearStarX/article/details/101000516 一.fixture优势1.fixture相对于setup和teardown ...

  9. CentOS 7操作系统目录结构介绍

    CentOS 7操作系统目录结构介绍 操作系统存在着大量的数据文件信息,相应文件信息会存在于系统相应目录中,为了更好的管理数据信息,会将系统进行一些目录规划,不同目录存放不同的资源. 根下目录结构说明 ...

  10. spring boot:配置shardingsphere(sharding jdbc)使用druid数据源(druid 1.1.23 / sharding-jdbc 4.1.1 / mybatis / spring boot 2.3.3)

    一,为什么要使用druid数据源? 1,druid的优点 Druid是阿里巴巴开发的号称为监控而生的数据库连接池 它的优点包括: 可以监控数据库访问性能 SQL执行日志 SQL防火墙 但spring ...