一次打包引发的思考,原来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 | 可选,表示不递归子模块 |
怎么样,理解了吗?是不是有点晦涩难懂,哈哈....
别着急,下面通过几个命令理解一下(全部在父工程P
的根目录下执行)。
mvn clean install -pl A -am
对父工程P
、子模块A
以及A
模块依赖的B
、C
模块执行mvn clean install
操作。
这个命令执行成功后,可以看到P
、A
、B
、C
四个模块全部安装到本地了。
mvn clean install -pl C -am
对父工程P
、子模块C
模块执行mvn clean install
操作。
这个命令执行成功后,可以看到P
、C
两个模块安装到本地。
由于
C
模块「不依赖」其他的两个子模块,因此A
、B
模块不会执行相关命令。
mvn clean install -pl C -amd
对父工程P
、子模块C
以及依赖于C
模块的B、
C模块执行
mvn clean install`操作。
这个命令执行成功后,可以看到P
、A
、B
、C
四个模块全部安装到本地了。
mvn clean install -N
只会打包父工程P
,它的子模块将不会执行相关操作。
怎么样?通过以上的命令应该理解了吧。
总结
随着项目的体量逐渐增长,可不止上面的几个模块,学会以上几个命令,提升的效率可不止一倍啊。
一次打包引发的思考,原来maven还能这么玩?的更多相关文章
- Spring之LoadTimeWeaver——一个需求引发的思考---转
原文地址:http://www.myexception.cn/software-architecture-design/602651.html Spring之LoadTimeWeaver——一个需求引 ...
- 一次composer错误使用引发的思考
一次composer错误使用引发的思考 这个思考源自于一个事故.让我对版本依赖重新思考了一下. 事故现象 一个线上的管理后台,一个使用laravel搭建的管理后台,之前在线上跑的好好的,今天comop ...
- 走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
小李的Build之路(上) 转自: 刘欣 码农翻身 2016-07-10 摘要:手工Build的烦恼要不是为了和女朋友留在一个城市,小李肯定去北上广奋斗去了.现在他只能留在这个2.5线城市,进入这家软 ...
- 由SecureCRT引发的思考和学习
由SecureCRT引发的思考和学习 http://mp.weixin.qq.com/s?__biz=MzAxOTAzMDEwMA==&mid=2652500597&idx=1& ...
- 解决一道leetcode算法题的曲折过程及引发的思考
写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...
- 【思考】由安装zabbix至排障php一系列引发的思考
[思考]由安装zabbix至排障php一系列引发的思考 linux的知识点林立众多,很有可能你在排查一个故障的时候就得用到另一门技术的知识: 由于linux本身的应用依赖的库和其它环境环环相扣,但又没 ...
- 由<a href = "#" > 引发的思考
原文:由<a href = "#" > 引发的思考 前阵子在一个移动项目中,通过 <a href = "#" > 的方式 绑定clic ...
- 曲演杂坛--一条DELETE引发的思考
原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID ,) PRIMARY KEY, D ...
- class_copyIvarList方法获取实例变量问题引发的思考
在runtime.h中,你可以通过其中的一个方法来获取实例变量,那就是class_copyIvarList方法,具体的实现如下: - (NSArray *)ivarArray:(Class)cls { ...
随机推荐
- Typore的简单用法
1 无序列表使用方法 +号和空格一起按就可以写出这个点 2 有序列表使用方法 .先写1.然后打个空格就再回车 3 使用#和空格表示一级标题 一级标题 4 使用##和空格表示二级标题 5 二级标题 6 ...
- C/的常用位运算符
双目运算符 位逻辑运算符 有6种位运算: & 与运算 | 或运算 ^ 异或运算 ! 非运算(求补) >> 右移运算 << 左移运算 与运算(&)双目运算.二个位 ...
- MySQL 查询字段时,区分大小写
设置排序规则: 区分大小写的查询: mysql> select * from user; +----+----------+-----------+------+------+ | id | u ...
- 第一次使用HSDB
今天看了几篇大佬关于HSDB使用的文章,自己也依样画葫芦的用来一下,强大的一匹!!! HSDB(Hotspot Debugger),JDK自带的工具,用于查看JVM运行时的状态. HSDB位于C:\P ...
- 在Windows7中打开照片,提示“Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足。....”
在Windows7中打开照片,提示"Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足.请关闭一些目前没有使用的程序或者释放部分硬盘空间(如果硬盘几乎已满),然后重试. ...
- CDH5部署三部曲之一:准备工作
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 用ip xfrm搭ipsec隧道
拓扑如下 基本的IP配置就不说了,直接写重点,在LS上配置 #配置SA ip xfrm state add src 194.168.10.4 dst 194.168.10.5 proto esp sp ...
- turtle库元素语法分析
一.turtle原理理解: turtle库是Python中一个有趣的图形绘制函数库.原名(海龟),我们想象一只海龟,位于显示器上窗体的正中心,在画布上游走,它游走的轨迹就形成了绘制的图形. 对于小海龟 ...
- 多测师讲解python_os模块_高级讲师肖sir
#os.path.isfile()#:判断当前是否为文件,返回布尔值是文件则True否者Falsea_path='F:\cms搭建.rar' #lesson包b_path=r'D:\bao\kk '# ...
- if-else和if if的对比