MAVEN专题之八、大型Maven项目,快速按需任意构建,必备神技能!相知恨晚!...
maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能。
这是maven系列第8篇。
整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部有maven完整系列的连接。
本篇涉及到的内容属于神技能,多数使用maven的人都经常想要的一种功能,但是大多数人都不知道如何使用,废话不多说,上干货。
需求背景
我们需要做一个电商项目,一般都会做成微服务的形式,按业务进行划分,本次我们主要以账户业务和订单业务为例,我们将这两块业务分别作为2个大的模块来开发,而订单模块又会调用账户模块中的接口,所以对账户模块接口部分会有依赖。
我们以maven来搭建项目,项目的目录结构如下:
b2b b2b-account b2b-account-api b2b-account-service b2b-order b2b-order-api b2b-order-service
b2b-account
账户模块,其中包含2个小模块:b2b-account-api和b2b-account-service
b2b-account-api
账户模块对外暴露的接口部分,以供外部调用
b2b-account-service
账户模块具体业务实现,依赖于b2b-account-api
模块
b2b-order
订单模块,也是包含2个小模块:b2b-order-api和b2b-order-service
b2b-order-api
订单模块对外暴露的接口部分,以供外部调用
b2b-order-service
订单模块具体业务实现,依赖2个模块b2b-order-api、b2b-account-api
搭建项目结构
我们按照上面的需求,使用maven搭建项目结构,具体过程如下。
创建b2b项目
打开idea,点击File->New->Project
,如下图:
选择Maven
,如下图:
点击上图的Next
,输入坐标信息,如下图:
点击上图的Next
,输入Project Name
为b2b
,如下图:
点击上图的Finish
,完成项目的创建,如下图:
删除下图中无用的代码:
变成了下面这样:
配置一下idea的maven环境,点击File->Settings
,如下图:
点击上面的OK
完成配置。
在b2b下创建b2b-account模块
注意这里是创建模块,不是项目了,注意下面的操作过程。
选中b2b项目目录,如下图:
点击File->New->Module
,如下图:
选择Maven
,如下图:
点击Next
,如下图:
点击上面第二个...
,将Parent置为None
,如下图:
输入坐标信息,如下图:
点击上图中的Next
,输入Project name
为b2b-account
,如下图:
点击Finish
,完成b2b-account
模块的创建,如下图:
删除b2b-account
中src
目录,如下图:
项目结构变成了下面这样:
在b2b-account模块下面创建b2b-account-api模块
选中b2b-account
,如下图:
点击File->New->Module
,如下图:
选择Maven
,如下图:
点击上图中的Next
,如下图:
将上面的Add as module to
设置为b2b-account
模块,表示新增的这个模块被b2b-account
聚合进行管理。
点击Parent
后面的...
,选择None
,将Parent
对应的值置为None
。
如下图:
输入坐标信息,如下图:
点击Next
,默认如下图:
我们需要对上面3个输入框的值进行修改,修改成下面这样:
点击Finish
,完成创建,如下图:
在b2b-account模块下创建b2b-account-service模块
这个过程参考在b2b-account模块下面创建b2b-account-api模块
。
在b2b下创建b2b-order模块
这个过程参考在b2b下创建b2b-account模块
。
在b2b-order模块下面创建b2b-order-api模块
这个过程参考在b2b-account模块下面创建b2b-account-api模块
。
在b2b-order模块下面创建b2b-order-service模块
这个过程参考在b2b-account模块下面创建b2b-account-api模块
。
项目结构创建成功
上面都创建成功之后,项目结构如下图
参与过大型maven项目开发的是不是很熟悉很亲切,多数互联网项目的maven结构就是这样一大片maven模块。
引入项目依赖
b2b-account-service依赖于b2b-account-api
模块,所以在b2b-account-service/pom.xml
中加入下面配置:
<dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>b2b-account-api</artifactId> <version>${project.version}</version> </dependency> </dependencies>
由于项目的
groupId,version
都是一样的,所以直接通过${}
这种方式引用了。
b2b-order-service依赖2个模块b2b-order-api、b2b-account-api
,所以在b2b-order-service/pom.xml
中加入下面配置:
<dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>b2b-account-api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>b2b-order-api</artifactId> <version>${project.version}</version> </dependency> </dependencies>
此时每个模块pom.xml如下
b2b/pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacode2018</groupId> <artifactId>b2b</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>b2b-account</module> <module>b2b-order</module> </modules> </project>
b2b-account/pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacode2018</groupId> <artifactId>b2b-account</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>b2b-account-api</module> <module>b2b-account-service</module> </modules> </project>
b2b-account-api/pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacode2018</groupId> <artifactId>b2b-account-api</artifactId> <version>1.0-SNAPSHOT</version> </project>
b2b-account-service/pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacode2018</groupId> <artifactId>b2b-account-service</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>b2b-account-api</artifactId> <version>${project.version}</version> </dependency> </dependencies> </project>
b2b-order/pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacode2018</groupId> <artifactId>b2b-order</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>b2b-order-api</module> <module>b2b-order-service</module> </modules> </project>
b2b-order-api/pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacode2018</groupId> <artifactId>b2b-order-api</artifactId> <version>1.0-SNAPSHOT</version> </project>
b2b-order-service/pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacode2018</groupId> <artifactId>b2b-order-service</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>b2b-account-api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>b2b-order-api</artifactId> <version>${project.version}</version> </dependency> </dependencies> </project>
注意:上面项目的结构属于父子结构,使用maven中聚合的方式进行管理的,对应聚合不是太了解的,可以看上篇文章有详细介绍。
b2b中包含了2个子模块
b2b_account
和b2b_order
,这3个package都是pom。b2b_account中包含了2个子模块,2个子模块package是默认的jar类型。
b2b_order中包含了2个子模块,2个子模块package是默认的jar类型。
反应堆
上面项目都开发好了,我们需要安装到本地仓库,一般情况下,我们会这么做,在b2b/pom.xml
所在目录执行下面命令:
mvn clean install
我们来感受一下这个命令的效果:
D:\code\IdeaProjects\b2b>mvn clean install [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] b2b-account-api [jar] [INFO] b2b-account-service [jar] [INFO] b2b-account [pom] [INFO] b2b-order-api [jar] [INFO] b2b-order-service [jar] [INFO] b2b-order [pom] [INFO] b2b [pom] [INFO] [INFO] ------------------< com.javacode2018:b2b-account-api >------------------ [INFO] Building b2b-account-api 1.0-SNAPSHOT [1/7] [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api --- [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api --- [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api --- [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.jar [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.pom [INFO] [INFO] ----------------< com.javacode2018:b2b-account-service >---------------- [INFO] Building b2b-account-service 1.0-SNAPSHOT [2/7] [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-service --- [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-service --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-service --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-service --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-service --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-service --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-service --- [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target\b2b-account-service-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-service --- [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target\b2b-account-service-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-service\1.0-SNAPSHOT\b2b-account-service-1.0-SNAPSHOT.jar [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-service\1.0-SNAPSHOT\b2b-account-service-1.0-SNAPSHOT.pom [INFO] [INFO] --------------------< com.javacode2018:b2b-account >-------------------- [INFO] Building b2b-account 1.0-SNAPSHOT [3/7] [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account --- [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account --- [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account\1.0-SNAPSHOT\b2b-account-1.0-SNAPSHOT.pom [INFO] [INFO] -------------------< com.javacode2018:b2b-order-api >------------------- [INFO] Building b2b-order-api 1.0-SNAPSHOT [4/7] [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-api --- [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-api --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-api --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-api --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-api --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-api --- [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-api --- [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.jar [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.pom [INFO] [INFO] -----------------< com.javacode2018:b2b-order-service >----------------- [INFO] Building b2b-order-service 1.0-SNAPSHOT [5/7] [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-service --- [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-service --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-service --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-service --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-service --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-service --- [INFO] No tests to run. [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-service --- [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-service --- [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.jar [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.pom [INFO] [INFO] ---------------------< com.javacode2018:b2b-order >--------------------- [INFO] Building b2b-order 1.0-SNAPSHOT [6/7] [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order --- [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order --- [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order\1.0-SNAPSHOT\b2b-order-1.0-SNAPSHOT.pom [INFO] [INFO] ------------------------< com.javacode2018:b2b >------------------------ [INFO] Building b2b 1.0-SNAPSHOT [7/7] [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b --- [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b --- [INFO] Installing D:\code\IdeaProjects\b2b\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b\1.0-SNAPSHOT\b2b-1.0-SNAPSHOT.pom [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for b2b 1.0-SNAPSHOT: [INFO] [INFO] b2b-account-api .................................... SUCCESS [ 1.806 s] [INFO] b2b-account-service ................................ SUCCESS [ 0.298 s] [INFO] b2b-account ........................................ SUCCESS [ 0.082 s] [INFO] b2b-order-api ...................................... SUCCESS [ 0.229 s] [INFO] b2b-order-service .................................. SUCCESS [ 0.254 s] [INFO] b2b-order .......................................... SUCCESS [ 0.058 s] [INFO] b2b ................................................ SUCCESS [ 0.069 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.072 s [INFO] Finished at: 2019-11-20T16:03:27+08:00 [INFO] ------------------------------------------------------------------------
注意上面有这样的输出:
1 [INFO] Reactor Build Order: 2 [INFO] 3 [INFO] b2b-account-api [jar] 4 [INFO] b2b-account-service [jar] 5 [INFO] b2b-account [pom] 6 [INFO] b2b-order-api [jar] 7 [INFO] b2b-order-service [jar] 8 [INFO] b2b-order [pom] 9 [INFO] b2b [pom]
maven会根据模块之间的依赖关系,然后会得到所有模块的构建顺序,上面共有7个pom.xml文件,也就是7个maven构件,按照上面列出的顺序依次进行构建。
可以看到b2b-account-api
是被其他一些模块依赖的,所以这个放在了第一个。
mvn
命令对多模块构件时,会根据模块的依赖关系而得到模块的构建顺序,这个功能就是maven的反应堆(reactor)做的事情,反应堆会根据模块之间的依赖关系、聚合关系、继承关系等等,从而计算得出一个合理的模块构建顺序,所以反应堆的功能是相当强大的。
按需随意构建
有这样的一种场景:b2b-account-api
被b2b-account-service
和b2b-order-service
依赖了,所以当b2b-account-api
有修改的时候,我们希望他们3个都能够被重新构建一次,而不是去对所有的模块都进行重新构建,我们只希望被影响的模块都能够参与重新构建,大家有什么好的办法?
上面列出的只是2个模块的功能,真正的电商项目还有很多模块,如果每次修改一个模块,我们都去重新打包所有的模块,这个构建过程耗时是非常久的,只能干等着,我们需要的是按需构建,需要构建哪些模块让我们自己能够随意指定,这样也可以加快构建的速度,所以我们需要这样的功能
maven反应堆帮我们考虑到了这种情况,mvn命令提供了一些功能可以帮我们实现这些操作,我们看一下mvn的帮助文档,mvn -h
可以查看帮助,如下:
1 D:\code\IdeaProjects\b2b>mvn -h 2 usage: mvn [options] [<goal(s)>] [<phase(s)>] 3 Options: 4 -am,--also-make If project list is specified, also 5 build projects required by the 6 list 7 -amd,--also-make-dependents If project list is specified, also 8 build projects that depend on 9 projects on the list 10 -B,--batch-mode Run in non-interactive (batch) 11 mode (disables output color) 12 -b,--builder <arg> The id of the build strategy to 13 use 14 -C,--strict-checksums Fail the build if checksums don't 15 match 16 -c,--lax-checksums Warn if checksums don't match 17 -cpu,--check-plugin-updates Ineffective, only kept for 18 backward compatibility 19 -D,--define <arg> Define a system property 20 -e,--errors Produce execution error messages 21 -emp,--encrypt-master-password <arg> Encrypt master security password 22 -ep,--encrypt-password <arg> Encrypt server password 23 -f,--file <arg> Force the use of an alternate POM 24 file (or directory with pom.xml) 25 -fae,--fail-at-end Only fail the build afterwards; 26 allow all non-impacted builds to 27 continue 28 -ff,--fail-fast Stop at first failure in 29 reactorized builds 30 -fn,--fail-never NEVER fail the build, regardless 31 of project result 32 -gs,--global-settings <arg> Alternate path for the global 33 settings file 34 -gt,--global-toolchains <arg> Alternate path for the global 35 toolchains file 36 -h,--help Display help information 37 -l,--log-file <arg> Log file where all build output 38 will go (disables output color) 39 -llr,--legacy-local-repository Use Maven 2 Legacy Local 40 Repository behaviour, ie no use of 41 _remote.repositories. Can also be 42 activated by using 43 -Dmaven.legacyLocalRepo=true 44 -N,--non-recursive Do not recurse into sub-projects 45 -npr,--no-plugin-registry Ineffective, only kept for 46 backward compatibility 47 -npu,--no-plugin-updates Ineffective, only kept for 48 backward compatibility 49 -nsu,--no-snapshot-updates Suppress SNAPSHOT updates 50 -ntp,--no-transfer-progress Do not display transfer progress 51 when downloading or uploading 52 -o,--offline Work offline 53 -P,--activate-profiles <arg> Comma-delimited list of profiles 54 to activate 55 -pl,--projects <arg> Comma-delimited list of specified 56 reactor projects to build instead 57 of all projects. A project can be 58 specified by [groupId]:artifactId 59 or by its relative path 60 -q,--quiet Quiet output - only show errors 61 -rf,--resume-from <arg> Resume reactor from specified 62 project 63 -s,--settings <arg> Alternate path for the user 64 settings file 65 -t,--toolchains <arg> Alternate path for the user 66 toolchains file 67 -T,--threads <arg> Thread count, for instance 2.0C 68 where C is core multiplied 69 -U,--update-snapshots Forces a check for missing 70 releases and updated snapshots on 71 remote repositories 72 -up,--update-plugins Ineffective, only kept for 73 backward compatibility 74 -v,--version Display version information 75 -V,--show-version Display version information 76 WITHOUT stopping build 77 -X,--debug Produce execution debug output
上面列出了mvn
命令后面的一些选项,有几个选项本次我们需要用到,如下:
-pl,--projects <arg>
构件指定的模块,arg表示多个模块,之间用逗号分开,模块有两种写法
1 -pl 模块1相对路径 [,模块2相对路径] [,模块n相对路径] 2 -pl [模块1的groupId]:模块1的artifactId [,[模块2的groupId]:模块2的artifactId] [,[模块n的groupId]:模块n的artifactId]
举例:
下面命令都是在b2b/pom.xml来运行
1 mvn clean install -pl b2b-account 2 mvn clean install -pl b2b-account/b2b-account-api 3 mvn clean install -pl b2b-account/b2b-account-api,b2b-account/b2b-account-service 4 mvn clean install -pl :b2b-account-api,b2b-order/b2b-order-api 5 mvn clean install -pl :b2b-account-api,:b2b-order-service
-rf,--resume-from <arg>
从指定的模块恢复反应堆
-am,--also-make
同时构建所列模块的依赖模块
-amd,--also-make-dependents
同时构件依赖于所列模块的模块
下面我们通过6个案例细说上面这些用法。
注意:下面所有案例都在b2b/pom.xml
所在目录执行。
案例1
只构建p-account
模块,运行命令
mvn clean install -pl b2b-account
效果如下:
1 D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account 2 [INFO] Scanning for projects... 3 [INFO] 4 [INFO] --------------------< com.javacode2018:b2b-account >-------------------- 5 [INFO] Building b2b-account 1.0-SNAPSHOT 6 [INFO] --------------------------------[ pom ]--------------------------------- 7 [INFO] 8 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account --- 9 [INFO] 10 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account --- 11 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account\1.0-SNAPSHOT\b2b-account-1.0-SNAPSHOT.pom 12 [INFO] ------------------------------------------------------------------------ 13 [INFO] BUILD SUCCESS 14 [INFO] ------------------------------------------------------------------------ 15 [INFO] Total time: 0.907 s 16 [INFO] Finished at: 2019-11-20T16:12:51+08:00 17 [INFO] ------------------------------------------------------------------------
可以看到只构建了b2b-account
。
案例2
只构建b2b-account-api模块,运行命令:
mvn clean install -pl b2b-account/b2b-account-api
效果如下:
1 D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account/b2b-account-api 2 [INFO] Scanning for projects... 3 [INFO] 4 [INFO] ------------------< com.javacode2018:b2b-account-api >------------------ 5 [INFO] Building b2b-account-api 1.0-SNAPSHOT 6 [INFO] --------------------------------[ jar ]--------------------------------- 7 [INFO] 8 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api --- 9 [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target 10 [INFO] 11 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api --- 12 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 13 [INFO] Copying 0 resource 14 [INFO] 15 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api --- 16 [INFO] Nothing to compile - all classes are up to date 17 [INFO] 18 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api --- 19 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 20 [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources 21 [INFO] 22 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api --- 23 [INFO] Nothing to compile - all classes are up to date 24 [INFO] 25 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api --- 26 [INFO] No tests to run. 27 [INFO] 28 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api --- 29 [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar 30 [INFO] 31 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api --- 32 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.jar 33 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.pom 34 [INFO] ------------------------------------------------------------------------ 35 [INFO] BUILD SUCCESS 36 [INFO] ------------------------------------------------------------------------ 37 [INFO] Total time: 2.853 s 38 [INFO] Finished at: 2019-11-20T16:14:37+08:00 39 [INFO] ------------------------------------------------------------------------
上面使用的是相对路径的写法,还有2种写法,大家可以去试试,如下:
mvn clean install -pl :b2b-account-api
mvn clean install -pl com.javacode2018:b2b-account-api
案例3
构建b2b-account-api和b2b-order-api,运行下面命令:
mvn clean install -pl b2b-account/b2b-account-api,b2b-order/b2b-order-api
效果如下:
1 D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account/b2b-account-api,b2b-order/b2b-order-api 2 [INFO] Scanning for projects... 3 [INFO] ------------------------------------------------------------------------ 4 [INFO] Reactor Build Order: 5 [INFO] 6 [INFO] b2b-account-api [jar] 7 [INFO] b2b-order-api [jar] 8 [INFO] 9 [INFO] ------------------< com.javacode2018:b2b-account-api >------------------ 10 [INFO] Building b2b-account-api 1.0-SNAPSHOT [1/2] 11 [INFO] --------------------------------[ jar ]--------------------------------- 12 [INFO] 13 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api --- 14 [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target 15 [INFO] 16 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api --- 17 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 18 [INFO] Copying 0 resource 19 [INFO] 20 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api --- 21 [INFO] Nothing to compile - all classes are up to date 22 [INFO] 23 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api --- 24 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 25 [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources 26 [INFO] 27 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api --- 28 [INFO] Nothing to compile - all classes are up to date 29 [INFO] 30 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api --- 31 [INFO] No tests to run. 32 [INFO] 33 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api --- 34 [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar 35 [INFO] 36 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api --- 37 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.jar 38 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.pom 39 [INFO] 40 [INFO] -------------------< com.javacode2018:b2b-order-api >------------------- 41 [INFO] Building b2b-order-api 1.0-SNAPSHOT [2/2] 42 [INFO] --------------------------------[ jar ]--------------------------------- 43 [INFO] 44 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-api --- 45 [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target 46 [INFO] 47 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-api --- 48 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 49 [INFO] Copying 0 resource 50 [INFO] 51 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-api --- 52 [INFO] Nothing to compile - all classes are up to date 53 [INFO] 54 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-api --- 55 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 56 [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\src\test\resources 57 [INFO] 58 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-api --- 59 [INFO] Nothing to compile - all classes are up to date 60 [INFO] 61 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-api --- 62 [INFO] No tests to run. 63 [INFO] 64 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-api --- 65 [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar 66 [INFO] 67 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-api --- 68 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.jar 69 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.pom 70 [INFO] ------------------------------------------------------------------------ 71 [INFO] Reactor Summary for b2b-account-api 1.0-SNAPSHOT: 72 [INFO] 73 [INFO] b2b-account-api .................................... SUCCESS [ 2.874 s] 74 [INFO] b2b-order-api ...................................... SUCCESS [ 0.393 s] 75 [INFO] ------------------------------------------------------------------------ 76 [INFO] BUILD SUCCESS 77 [INFO] ------------------------------------------------------------------------ 78 [INFO] Total time: 3.554 s 79 [INFO] Finished at: 2019-11-20T16:15:57+08:00 80 [INFO] ------------------------------------------------------------------------
上面输出中可以看到只构建了2个目标模块。
案例4
我们只修改了b2b-account-api代码,所以我希望对这个重新打包,并且对这个有依赖的也重新打包,所以需要打包下面3个模块:
1 b2b-account-api 2 b2b-account-service 3 b2b-order-service
上面列表中的后面两个是依赖于b2b-account-api
的,可以在b2b/pom.xml中执行下面命令:
mvn clean install -pl b2b-account/b2b-account-api -amd
我们看一下效果:
1 D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account/b2b-account-api -amd 2 [INFO] Scanning for projects... 3 [INFO] ------------------------------------------------------------------------ 4 [INFO] Reactor Build Order: 5 [INFO] 6 [INFO] b2b-account-api [jar] 7 [INFO] b2b-account-service [jar] 8 [INFO] b2b-order-service [jar] 9 [INFO] 10 [INFO] ------------------< com.javacode2018:b2b-account-api >------------------ 11 [INFO] Building b2b-account-api 1.0-SNAPSHOT [1/3] 12 [INFO] --------------------------------[ jar ]--------------------------------- 13 [INFO] 14 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api --- 15 [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target 16 [INFO] 17 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api --- 18 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 19 [INFO] Copying 0 resource 20 [INFO] 21 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api --- 22 [INFO] Nothing to compile - all classes are up to date 23 [INFO] 24 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api --- 25 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 26 [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources 27 [INFO] 28 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api --- 29 [INFO] Nothing to compile - all classes are up to date 30 [INFO] 31 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api --- 32 [INFO] No tests to run. 33 [INFO] 34 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api --- 35 [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar 36 [INFO] 37 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api --- 38 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.jar 39 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.pom 40 [INFO] 41 [INFO] ----------------< com.javacode2018:b2b-account-service >---------------- 42 [INFO] Building b2b-account-service 1.0-SNAPSHOT [2/3] 43 [INFO] --------------------------------[ jar ]--------------------------------- 44 [INFO] 45 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-service --- 46 [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target 47 [INFO] 48 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-service --- 49 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 50 [INFO] Copying 0 resource 51 [INFO] 52 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-service --- 53 [INFO] Nothing to compile - all classes are up to date 54 [INFO] 55 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-service --- 56 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 57 [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\src\test\resources 58 [INFO] 59 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-service --- 60 [INFO] Nothing to compile - all classes are up to date 61 [INFO] 62 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-service --- 63 [INFO] No tests to run. 64 [INFO] 65 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-service --- 66 [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target\b2b-account-service-1.0-SNAPSHOT.jar 67 [INFO] 68 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-service --- 69 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target\b2b-account-service-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-service\1.0-SNAPSHOT\b2b-account-service-1.0-SNAPSHOT.jar 70 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-service\1.0-SNAPSHOT\b2b-account-service-1.0-SNAPSHOT.pom 71 [INFO] 72 [INFO] -----------------< com.javacode2018:b2b-order-service >----------------- 73 [INFO] Building b2b-order-service 1.0-SNAPSHOT [3/3] 74 [INFO] --------------------------------[ jar ]--------------------------------- 75 [INFO] 76 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-service --- 77 [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target 78 [INFO] 79 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-service --- 80 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 81 [INFO] Copying 0 resource 82 [INFO] 83 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-service --- 84 [INFO] Nothing to compile - all classes are up to date 85 [INFO] 86 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-service --- 87 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 88 [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\src\test\resources 89 [INFO] 90 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-service --- 91 [INFO] Nothing to compile - all classes are up to date 92 [INFO] 93 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-service --- 94 [INFO] No tests to run. 95 [INFO] 96 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-service --- 97 [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar 98 [INFO] 99 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-service --- 100 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.jar 101 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.pom 102 [INFO] ------------------------------------------------------------------------ 103 [INFO] Reactor Summary for b2b-account-api 1.0-SNAPSHOT: 104 [INFO] 105 [INFO] b2b-account-api .................................... SUCCESS [ 2.440 s] 106 [INFO] b2b-account-service ................................ SUCCESS [ 0.381 s] 107 [INFO] b2b-order-service .................................. SUCCESS [ 0.364 s] 108 [INFO] ------------------------------------------------------------------------ 109 [INFO] BUILD SUCCESS 110 [INFO] ------------------------------------------------------------------------ 111 [INFO] Total time: 3.508 s 112 [INFO] Finished at: 2019-11-20T16:05:00+08:00 113 [INFO] ------------------------------------------------------------------------
从上面输出中看一下反应堆列出的构建顺序:b2b-account-api、b2b-account-service、b2b-order-service。
上面过程给大家捋一捋:
上面命令先会运行-pl b2b-account-api
得到一个反应堆列表,如下,只有一个模块:
b2b-account-api
然后后面又会执行amd
,这个命令会找到对-pl b2b-account-api
有依赖的构件,也就是:
1 b2b-account-service 2 b2b-order-serivce
然后反应堆会对3个构件进行排序,得到一个正确的构件顺序,如下:
1 [INFO] Reactor Build Order: 2 [INFO] 3 [INFO] b2b-account-api [jar] 4 [INFO] b2b-account-service [jar] 5 [INFO] b2b-order-service [jar]
然后maven会依次对他们执行:
mvn clean install
案例5
需求:我们来构建b2b-order-service,希望b2b-account-service依赖的构件也能被同时构建,b2b-account-service依赖于b2b-account-api
和b2b-order-api
,可能b2b-account-service会依赖的更多。
可以使用下面命令:
mvn clean install -pl b2b-order/b2b-order-service -am
效果如下:
1 D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-order/b2b-order-service -am 2 [INFO] Scanning for projects... 3 [INFO] ------------------------------------------------------------------------ 4 [INFO] Reactor Build Order: 5 [INFO] 6 [INFO] b2b-account-api [jar] 7 [INFO] b2b-order-api [jar] 8 [INFO] b2b-order-service [jar] 9 [INFO] 10 [INFO] ------------------< com.javacode2018:b2b-account-api >------------------ 11 [INFO] Building b2b-account-api 1.0-SNAPSHOT [1/3] 12 [INFO] --------------------------------[ jar ]--------------------------------- 13 [INFO] 14 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api --- 15 [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target 16 [INFO] 17 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api --- 18 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 19 [INFO] Copying 0 resource 20 [INFO] 21 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api --- 22 [INFO] Nothing to compile - all classes are up to date 23 [INFO] 24 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api --- 25 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 26 [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources 27 [INFO] 28 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api --- 29 [INFO] Nothing to compile - all classes are up to date 30 [INFO] 31 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api --- 32 [INFO] No tests to run. 33 [INFO] 34 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api --- 35 [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar 36 [INFO] 37 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api --- 38 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.jar 39 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.pom 40 [INFO] 41 [INFO] -------------------< com.javacode2018:b2b-order-api >------------------- 42 [INFO] Building b2b-order-api 1.0-SNAPSHOT [2/3] 43 [INFO] --------------------------------[ jar ]--------------------------------- 44 [INFO] 45 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-api --- 46 [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target 47 [INFO] 48 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-api --- 49 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 50 [INFO] Copying 0 resource 51 [INFO] 52 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-api --- 53 [INFO] Nothing to compile - all classes are up to date 54 [INFO] 55 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-api --- 56 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 57 [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\src\test\resources 58 [INFO] 59 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-api --- 60 [INFO] Nothing to compile - all classes are up to date 61 [INFO] 62 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-api --- 63 [INFO] No tests to run. 64 [INFO] 65 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-api --- 66 [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar 67 [INFO] 68 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-api --- 69 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.jar 70 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.pom 71 [INFO] 72 [INFO] -----------------< com.javacode2018:b2b-order-service >----------------- 73 [INFO] Building b2b-order-service 1.0-SNAPSHOT [3/3] 74 [INFO] --------------------------------[ jar ]--------------------------------- 75 [INFO] 76 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-service --- 77 [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target 78 [INFO] 79 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-service --- 80 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 81 [INFO] Copying 0 resource 82 [INFO] 83 [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-service --- 84 [INFO] Nothing to compile - all classes are up to date 85 [INFO] 86 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-service --- 87 [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! 88 [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\src\test\resources 89 [INFO] 90 [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-service --- 91 [INFO] Nothing to compile - all classes are up to date 92 [INFO] 93 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-service --- 94 [INFO] No tests to run. 95 [INFO] 96 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-service --- 97 [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar 98 [INFO] 99 [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-service --- 100 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.jar 101 [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.pom 102 [INFO] ------------------------------------------------------------------------ 103 [INFO] Reactor Summary for b2b-account-api 1.0-SNAPSHOT: 104 [INFO] 105 [INFO] b2b-account-api .................................... SUCCESS [ 2.509 s] 106 [INFO] b2b-order-api ...................................... SUCCESS [ 0.343 s] 107 [INFO] b2b-order-service .................................. SUCCESS [ 0.340 s] 108 [INFO] ------------------------------------------------------------------------ 109 [INFO] BUILD SUCCESS 110 [INFO] ------------------------------------------------------------------------ 111 [INFO] Total time: 3.455 s 112 [INFO] Finished at: 2019-11-20T16:46:45+08:00 113 [INFO] ------------------------------------------------------------------------
从上面输出中看一下反应堆列出的构建顺序:b2b-account-api、b2b-order-api、b2b-order-service。
上面过程给大家捋一捋:
上面命令先会运行-pl b2b-order-service
得到一个反应堆列表:
b2b-order-service
然后后面又会执行am
,这个命令会找到-pl b2b-order-service
依赖的构件,也就是:
1 b2b-account-api 2 b2b-order-api
然后反应堆会对3个构件进行排序,得到一个正确的构件顺序,如下:
1 [INFO] Reactor Build Order: 2 [INFO] 3 [INFO] b2b-account-api [jar] 4 [INFO] b2b-order-api [jar] 5 [INFO] b2b-order-service [jar]
然后maven会依次对他们执行:
mvn clean install
案例6
分别执行下面2条mvn命令,先看一下效果:
1 mvn clean install 2 mvn clean install -rf b2b-order/b2b-order-service
输出中我们取出部分内容,如下。
第一条命令,反应堆产生的构建顺序是:
1 [INFO] Reactor Build Order: 2 [INFO] 3 [INFO] b2b-account-api [jar] 4 [INFO] b2b-account-service [jar] 5 [INFO] b2b-account [pom] 6 [INFO] b2b-order-api [jar] 7 [INFO] b2b-order-service [jar] 8 [INFO] b2b-order [pom] 9 [INFO] b2b [pom]
第2条命令,反应堆产生的构建顺序是:
1 [INFO] Reactor Build Order: 2 [INFO] 3 [INFO] b2b-order-service [jar] 4 [INFO] b2b-order [pom] 5 [INFO] b2b [pom]
在仔细看一下上面2条命令的差别,后面的命令多了-rf b2b-order/b2b-order-service
,具体过程如下:
会先执行下面命令
mvn clean install
反应堆会计算出需要构件的模块顺序,如下:
1 [INFO] Reactor Build Order: 2 [INFO] 3 [INFO] b2b-account-api [jar] 4 [INFO] b2b-account-service [jar] 5 [INFO] b2b-account [pom] 6 [INFO] b2b-order-api [jar] 7 [INFO] b2b-order-service [jar] 8 [INFO] b2b-order [pom] 9 [INFO] b2b [pom]
-rf b2b-order/b2b-order-service
对上面的反应堆构件顺序进行裁剪,将b2b-order/b2b-order-service
前面的部分干掉,从b2b-order/b2b-order-service
开始执行构建操作,所以剩下了3个需要构建的模块。
总结
-
需要掌握
mvn
命令中-pl、-am、-amd、-rf
的各种用法 -
注意
-pl
后面的参数的写法:模块相对路径、或者[groupId].artifactId
还是那句话,上面这些用法大家会经常用到的,建议大家下去了多练练。看和操作,所获取到的是不能比的,看的过程中可能觉得一切都知道了,但是实际操作就不一样了,可能中间会遇到各种问题,然后自己会想办法解决这些问题,领会和学到的东西是不一样的!
Maven系列目录
更多好文章
来源:http://itsoku.com/course/2/69