今天在项目里新添加了一个Module, 但是在jenkins编译的时候会将这个Module也编译, 问题是这个Module根本不需要编译而且巨慢。
因此我只想编译指定模块 ModuleA以及它依赖的必须模块, 以下是相关的命令
-am --also-make 同时构建所列模块的依赖模块; -amd -also-make-dependents 同时构建依赖于所列模块的模块; -pl --projects <arg> 构建制定的模块,模块间用逗号分隔; -rf -resume-from <arg> 从指定的模块恢复反应堆。
<modules> <module>ModuleA</module> <module>ModuleB</module> <module>ModuleC</module> <module>ModuleD</module> <module>ModuleE</module> </modules>
首先查看一下依赖关系
mvn dependency:tree
当不然不是上面这句, 所有的依赖关系太复杂了, 会列出依赖的所有的包
自己打开各个module的pom看一下互相之间的依赖就行
假如只想编译ModuleB及其依赖的模块, 那么在编译的时候
mvn clean install -pl ModuleB -am
假设Module依赖了A和C, 那么在编译的时候就只会编译A B C三个模块~
如果ModuleD依赖了B, 然后在编译的时候使用了-amd的话, 那么ModuleD也会被编译, 这个意思就是编译依赖了所列模块的模块
mvn clean install -pl ModuleB -am -amd
使用上面的命令会同时编译 A B C D ~
-rf 选项用于选择起始位置(发现结合-rf的时候, -am和-amd是需要后置的)
假设ModuleA和ModuleC都依赖ModuleB, 那么如果在ModuleB截断, 整个流程不会变, 如果在ModuleA截断, 那么只会从ModuleA开始执行后面的构建流程。
mvn install -pl ModuleB -am -amd -rf ModuleA
上面的命令是从ModuleA开始截断的
总结
一般来说经常用到的命令, 你想编译的Module: ModuleX
mvn clean install ModuleX -am mvn clean package install -pl 模块的名称 -am