目录前言昨天有一个读者找我的交流工作心得,偶然间提到一个有趣的问题,如下: 「大致的意思」:公司最近在整多模块 开发,由于模块之间相互依赖,每次打包都很烦,必须根据依赖关系逐一进行打包,有没有省事的办法呢? 其实玩转Maven 的朋友都知道,只需要一条命令即可解决问题。 依赖关系假设有一个多模块项目,父工程P 中含有三个子模块A 、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 四个模块全部安装到本地了。
只会打包父工程P ,它的子模块将不会执行相关操作。 怎么样?通过以上的命令应该理解了吧。 总结随着项目的体量逐渐增长,可不止上面的几个模块,学会以上几个命令,提升的效率可不止一倍啊。
|