Maven笔记 - 第八章

第8篇:多模块任意构建,必备神技能

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,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ry98DhAR-1629908678929)(media/a0f6787edb2c55b44e15848295afa2be.png)]

选择Maven,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YQgQ598b-1629908678942)(media/ab770a4656c7727e58784e94a8c61ebe.png)]

点击上图的Next,输入坐标信息,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZfADeZaf-1629908678945)(media/db8b66f7eae7a8a650ffa49ee35942ba.png)]

点击上图的Next,输入Project Nameb2b,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2N7Xb22-1629908678950)(media/65207885e1ea32a625b016a419c050f1.png)]

点击上图的Finish,完成项目的创建,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5NA45Koh-1629908678954)(media/3f9d0cc132ae6fabdea39feed454e630.png)]

删除下图中无用的代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZhi3A4L-1629908678957)(media/9838b5b2cfd31c95223f81e5b491a690.png)]

变成了下面这样:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vMlHcnkp-1629908678959)(media/5dc29b85c7b7143a4ac7f568015eb816.png)]

配置一下idea的maven环境,点击File->Settings,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eGpY4vVO-1629908678961)(media/7801afae9cc1eb85ad24fdf891b66fec.png)]

点击上面的OK完成配置。

在b2b下创建b2b-account模块

注意这里是创建模块,不是项目了,注意下面的操作过程。

选中b2b项目目录,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nwgTyZrX-1629908678966)(media/81b3d13a5b91dd3beb1d543c5693ade3.png)]

点击File->New->Module,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9n0BtUBJ-1629908678969)(media/a3745d6580aa6d57e9f3ecf51e8887a8.png)]

选择Maven,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-80oALhS6-1629908678970)(media/25338b268cbb603e0e13c2afe2d111f5.png)]

点击Next,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GQIfBCXh-1629908678973)(media/7cc75c420a23a5f048b1b5bb98b0126a.png)]

点击上面第二个...,将Parent置为None,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tiNKaNe9-1629908678975)(media/9dd50288dade66fbecea724fa33ef5e4.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hvHTbJtt-1629908678977)(media/04856f97b2ecc00e5bcf0931a5aa1b12.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IVgj8gTE-1629908678980)(media/dbb21223b37127952eb56d6504fdd0b5.png)]

输入坐标信息,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KTyJeFFw-1629908678981)(media/355c04c0669c42bddc22e5081b229113.png)]

点击上图中的Next,输入Project nameb2b-account,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tTmYdXjk-1629908678984)(media/13f44668bc3eaa300ed77820372cec0c.png)]

点击Finish,完成b2b-account模块的创建,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w1LlSrom-1629908678987)(media/dcac9462d5d830d75a2feb99f94a9bae.png)]

删除b2b-accountsrc目录,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C4ZDvihY-1629908678989)(media/6f00fb7dc9879ee49c7e6a3dc3aaa0fb.png)]

项目结构变成了下面这样:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m9IZuJJo-1629908678991)(media/1b6cab23ce52f48780909a40affa5160.png)]

在b2b-account模块下面创建b2b-account-api模块

选中b2b-account,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lBVZFkIA-1629908678994)(media/30555e747a1eb9741efcd53f0999e66c.png)]

点击File->New->Module,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlASAmYw-1629908678995)(media/c31697ada6755f8fd3d5368fa92bfea9.png)]

选择Maven,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AUGFMbYB-1629908678998)(media/0f53e4d34368b46a425faf73f4d6cc75.png)]

点击上图中的Next,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9P0vfsMV-1629908679000)(media/ca0fe6aabc454e0fead7b7b947c4d48e.png)]

将上面的Add as module to设置为b2b-account模块,表示新增的这个模块被b2b-account聚合进行管理。

点击Parent后面的...,选择None,将Parent对应的值置为None

如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-34FLYLOd-1629908679002)(media/021ca7e58ce59c6181dfc138277ae286.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l32Hr6lQ-1629908679004)(media/abf242309f4683786f5b576b16572cd2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J6ND4mmw-1629908679006)(media/34787644e9f192d756ba12903462ebcb.png)]

输入坐标信息,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E3InDmvM-1629908679008)(media/5df8ddff476f793c3b7f2bc67e023954.png)]

点击Next,默认如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PoynurWS-1629908679010)(media/2efe5a7145649f7c346987b8165b64f7.png)]

我们需要对上面3个输入框的值进行修改,修改成下面这样:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GAWjAqdo-1629908679012)(media/5c15c8ccde36f9d2048e5618298fc337.png)]

点击Finish,完成创建,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0bcuQ0gV-1629908679013)(media/0824f60647e75413db152c572f9bda33.png)]

在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模块

项目结构创建成功

上面都创建成功之后,项目结构如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QUYW2Rwx-1629908679015)(media/1fac72db321eb2a862e12599cdf9b8d9.png)]

参与过大型maven项目开发的是不是很熟悉很亲切,多数互联网项目的maven结构就是这样一大片maven模块。

引入项目依赖

b2b-account-service依赖于b2b-account-api模块,所以在b2b-account-service/pom.xml中加入下面配置:


    
        ${project.groupId}
        b2b-account-api
        ${project.version}
    

由于项目的groupId,version都是一样的,所以直接通过${}这种方式引用了。

b2b-order-service依赖2个模块b2b-order-api、b2b-account-api,所以在b2b-order-service/pom.xml中加入下面配置:


    
        ${project.groupId}
        b2b-account-api
        ${project.version}
    
    
        ${project.groupId}
        b2b-order-api
        ${project.version}
    

此时每个模块pom.xml如下

b2b/pom.xml
 version="1.0" encoding="UTF-8"
 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"
    4.0.0

    com.javacode2018
    b2b
    pom
    1.0-SNAPSHOT
    
        b2b-account
        b2b-order
    
b2b-account/pom.xml
 version="1.0" encoding="UTF-8"
 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"
    4.0.0

    com.javacode2018
    b2b-account
    pom
    1.0-SNAPSHOT
    
        b2b-account-api
        b2b-account-service
    
b2b-account-api/pom.xml
 version="1.0" encoding="UTF-8"
 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"
    4.0.0

    com.javacode2018
    b2b-account-api
    1.0-SNAPSHOT
b2b-account-service/pom.xml
 version="1.0" encoding="UTF-8"
 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"
    4.0.0

    com.javacode2018
    b2b-account-service
    1.0-SNAPSHOT

    
        
            ${project.groupId}
            b2b-account-api
            ${project.version}
        
    
b2b-order/pom.xml
 version="1.0" encoding="UTF-8"
 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"
    4.0.0

    com.javacode2018
    b2b-order
    pom
    1.0-SNAPSHOT
    
        b2b-order-api
        b2b-order-service
    
b2b-order-api/pom.xml
 version="1.0" encoding="UTF-8"
 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"
    4.0.0

    com.javacode2018
    b2b-order-api
    1.0-SNAPSHOT
b2b-order-service/pom.xml
 version="1.0" encoding="UTF-8"
 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"
    4.0.0

    com.javacode2018
    b2b-order-service
    1.0-SNAPSHOT

    
        
            ${project.groupId}
            b2b-account-api
            ${project.version}
        
        
            ${project.groupId}
            b2b-order-api
            ${project.version}
        
    

注意:上面项目的结构属于父子结构,使用maven中聚合的方式进行管理的,对应聚合不是太了解的,可以看上篇文章有详细介绍。

b2b中包含了2个子模块b2b_accountb2b_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  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 (-clean) @ b2b-account-api ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-account-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-account-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-account-api ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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 (-clean) @ b2b-account-service ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-account-service ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-account-service ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-account-service ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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 (-clean) @ b2b-account ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (-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 (-clean) @ b2b-order-api ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-order-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-order-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-order-api ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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 (-clean) @ b2b-order-service ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-order-service ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-order-service ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-order-service ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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 (-clean) @ b2b-order ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (-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 (-clean) @ b2b ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (-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  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] ------------------------------------------------------------------------

注意上面有这样的输出:

[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]

maven会根据模块之间的依赖关系,然后会得到所有模块的构建顺序,上面共有7个pom.xml文件,也就是7个maven构件,按照上面列出的顺序依次进行构建。

可以看到b2b-account-api是被其他一些模块依赖的,所以这个放在了第一个。

mvn命令对多模块构件时,会根据模块的依赖关系而得到模块的构建顺序,这个功能就是maven的反应堆(reactor)做的事情,反应堆会根据模块之间的依赖关系、聚合关系、继承关系等等,从而计算得出一个合理的模块构建顺序,所以反应堆的功能是相当强大的。

按需随意构建

有这样的一种场景:b2b-account-apib2b-account-serviceb2b-order-service依赖了,所以当b2b-account-api有修改的时候,我们希望他们3个都能够被重新构建一次,而不是去对所有的模块都进行重新构建,我们只希望被影响的模块都能够参与重新构建,大家有什么好的办法?

上面列出的只是2个模块的功能,真正的电商项目还有很多模块,如果每次修改一个模块,我们都去重新打包所有的模块,这个构建过程耗时是非常久的,只能干等着,我们需要的是按需构建,需要构建哪些模块让我们自己能够随意指定,这样也可以加快构建的速度,所以我们需要这样的功能

maven反应堆帮我们考虑到了这种情况,mvn命令提供了一些功能可以帮我们实现这些操作,我们看一下mvn的帮助文档,mvn \-h可以查看帮助,如下:

D:\code\IdeaProjects\b2b>mvn -h

usage: mvn [options] [] []

Options:
 -am,--also-make                        If project list is specified, also
                                        build projects required by the
                                        list
 -amd,--also-make-dependents            If project list is specified, also
                                        build projects that depend on
                                        projects on the list
 -B,--batch-mode                        Run in non-interactive (batch)
                                        mode (disables output color)
 -b,--builder                      The id of the build strategy to
                                        use
 -C,--strict-checksums                  Fail the build if checksums don't
                                        match
 -c,--lax-checksums                     Warn if checksums don't match
 -cpu,--check-plugin-updates            Ineffective, only kept for
                                        backward compatibility
 -D,--define                       Define a system property
 -e,--errors                            Produce execution error messages
 -emp,--encrypt-master-password    Encrypt master security password
 -ep,--encrypt-password            Encrypt server password
 -f,--file                         Force the use of an alternate POM
                                        file (or directory with pom.xml)
 -fae,--fail-at-end                     Only fail the build afterwards;
                                        allow all non-impacted builds to
                                        continue
 -ff,--fail-fast                        Stop at first failure in
                                        reactorized builds
 -fn,--fail-never                       NEVER fail the build, regardless
                                        of project result
 -gs,--global-settings             Alternate path for the global
                                        settings file
 -gt,--global-toolchains           Alternate path for the global
                                        toolchains file
 -h,--help                              Display help information
 -l,--log-file                     Log file where all build output
                                        will go (disables output color)
 -llr,--legacy-local-repository         Use Maven 2 Legacy Local
                                        Repository behaviour, ie no use of
                                        _remote.repositories. Can also be
                                        activated by using
                                        -Dmaven.legacyLocalRepo=true
 -N,--non-recursive                     Do not recurse into sub-projects
 -npr,--no-plugin-registry              Ineffective, only kept for
                                        backward compatibility
 -npu,--no-plugin-updates               Ineffective, only kept for
                                        backward compatibility
 -nsu,--no-snapshot-updates             Suppress SNAPSHOT updates
 -ntp,--no-transfer-progress            Do not display transfer progress
                                        when downloading or uploading
 -o,--offline                           Work offline
 -P,--activate-profiles            Comma-delimited list of profiles
                                        to activate
 -pl,--projects                    Comma-delimited list of specified
                                        reactor projects to build instead
                                        of all projects. A project can be
                                        specified by [groupId]:artifactId
                                        or by its relative path
 -q,--quiet                             Quiet output - only show errors
 -rf,--resume-from                 Resume reactor from specified
                                        project
 -s,--settings                     Alternate path for the user
                                        settings file
 -t,--toolchains                   Alternate path for the user
                                        toolchains file
 -T,--threads                      Thread count, for instance 2.0C
                                        where C is core multiplied
 -U,--update-snapshots                  Forces a check for missing
                                        releases and updated snapshots on
                                        remote repositories
 -up,--update-plugins                   Ineffective, only kept for
                                        backward compatibility
 -v,--version                           Display version information
 -V,--show-version                      Display version information
                                        WITHOUT stopping build
 -X,--debug                             Produce execution debug output

上面列出了mvn命令后面的一些选项,有几个选项本次我们需要用到,如下:

-pl,–projects

构件指定的模块,arg表示多个模块,之间用逗号分开,模块有两种写法

-pl 模块1相对路径 [,模块2相对路径] [,模块n相对路径]
-pl [模块1的groupId]:模块1的artifactId [,[模块2的groupId]:模块2的artifactId] [,[模块n的groupId]:模块n的artifactId]

举例:

下面命令都是在b2b/pom.xml来运行

mvn clean install -pl b2b-account
mvn clean install -pl b2b-account/b2b-account-api
mvn clean install -pl b2b-account/b2b-account-api,b2b-account/b2b-account-service
mvn clean install -pl :b2b-account-api,b2b-order/b2b-order-api
mvn clean install -pl :b2b-account-api,:b2b-order-service

-rf,–resume-from

从指定的模块恢复反应堆

-am,–also-make

同时构建所列模块的依赖模块

-amd,–also-make-dependents

同时构件依赖于所列模块的模块

下面我们通过6个案例细说上面这些用法。

注意:下面所有案例都在b2b/pom.xml所在目录执行。

案例1

只构建p-account模块,运行命令

mvn clean install -pl b2b-account

效果如下:

D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.javacode2018:b2b-account >--------------------
[INFO] Building b2b-account 1.0-SNAPSHOT
[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] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.907 s
[INFO] Finished at: 2019-11-20T16:12:51+08:00
[INFO] ------------------------------------------------------------------------

可以看到只构建了b2b-account

案例2

只构建b2b-account-api模块,运行命令:

mvn clean install -pl b2b-account/b2b-account-api

效果如下:

D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account/b2b-account-api
[INFO] Scanning  projects...
[INFO]
[INFO] ------------------< com.javacode2018:b2b-account-api >------------------
[INFO] Building b2b-account-api 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (-clean) @ b2b-account-api ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-account-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-account-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-account-api ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.853 s
[INFO] Finished at: 2019-11-20T16:14:37+08:00
[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

效果如下:

D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account/b2b-account-api,b2b-order/b2b-order-api
[INFO] Scanning  projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] b2b-account-api                                                    [jar]
[INFO] b2b-order-api                                                      [jar]
[INFO]
[INFO] ------------------< com.javacode2018:b2b-account-api >------------------
[INFO] Building b2b-account-api 1.0-SNAPSHOT                              [1/2]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (-clean) @ b2b-account-api ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-account-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-account-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-account-api ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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-order-api >-------------------
[INFO] Building b2b-order-api 1.0-SNAPSHOT                                [2/2]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (-clean) @ b2b-order-api ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-order-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-order-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-order-api ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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] Reactor Summary  b2b-account-api 1.0-SNAPSHOT:
[INFO]
[INFO] b2b-account-api .................................SUCCESS [  2.874 s]
[INFO] b2b-order-api ...................................SUCCESS [  0.393 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.554 s
[INFO] Finished at: 2019-11-20T16:15:57+08:00
[INFO] ------------------------------------------------------------------------

上面输出中可以看到只构建了2个目标模块。

案例4

我们只修改了b2b-account-api代码,所以我希望对这个重新打包,并且对这个有依赖的也重新打包,所以需要打包下面3个模块:

b2b-account-api
b2b-account-service
b2b-order-service

上面列表中的后面两个是依赖于b2b-account-api的,可以在b2b/pom.xml中执行下面命令:

mvn clean install -pl b2b-account/b2b-account-api -amd

我们看一下效果:

D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account/b2b-account-api -amd
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] b2b-account-api                                                    [jar]
[INFO] b2b-account-service                                                [jar]
[INFO] b2b-order-service                                                  [jar]
[INFO]
[INFO] ------------------< com.javacode2018:b2b-account-api >------------------
[INFO] Building b2b-account-api 1.0-SNAPSHOT                              [1/3]
[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/3]
[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-order-service >-----------------
[INFO] Building b2b-order-service 1.0-SNAPSHOT                            [3/3]
[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] Reactor Summary for b2b-account-api 1.0-SNAPSHOT:
[INFO]
[INFO] b2b-account-api .................................... SUCCESS [  2.440 s]
[INFO] b2b-account-service ................................ SUCCESS [  0.381 s]
[INFO] b2b-order-service .................................. SUCCESS [  0.364 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.508 s
[INFO] Finished at: 2019-11-20T16:05:00+08:00
[INFO] ------------------------------------------------------------------------

从上面输出中看一下反应堆列出的构建顺序:b2b-account-api、b2b-account-service、b2b-order-service。

上面过程给大家捋一捋:

上面命令先会运行-pl b2b-account-api得到一个反应堆列表,如下,只有一个模块:

b2b-account-api

然后后面又会执行amd,这个命令会找到对-pl b2b-account-api有依赖的构件,也就是:

b2b-account-service
b2b-order-serivce

然后反应堆会对3个构件进行排序,得到一个正确的构件顺序,如下:

[INFO] Reactor Build Order:
[INFO]
[INFO] b2b-account-api                                                    [jar]
[INFO] b2b-account-service                                                [jar]
[INFO] b2b-order-service                                                  [jar]

然后maven会依次对他们执行:

mvn clean install

案例5

需求:我们来构建b2b-order-service,希望b2b-account-service依赖的构件也能被同时构建,b2b-account-service依赖于b2b-account-apib2b-order-api,可能b2b-account-service会依赖的更多。

可以使用下面命令:

mvn clean install -pl b2b-order/b2b-order-service -am

效果如下:

D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-order/b2b-order-service -am
[INFO] Scanning  projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] b2b-account-api                                                    [jar]
[INFO] b2b-order-api                                                      [jar]
[INFO] b2b-order-service                                                  [jar]
[INFO]
[INFO] ------------------< com.javacode2018:b2b-account-api >------------------
[INFO] Building b2b-account-api 1.0-SNAPSHOT                              [1/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (-clean) @ b2b-account-api ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-account-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-account-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-account-api ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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-order-api >-------------------
[INFO] Building b2b-order-api 1.0-SNAPSHOT                                [2/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (-clean) @ b2b-order-api ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-order-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-order-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-order-api ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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                            [3/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (-clean) @ b2b-order-service ---
[INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-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 (-compile) @ b2b-order-service ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-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 (-testCompile) @ b2b-order-service ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ b2b-order-service ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-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 (-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] Reactor Summary  b2b-account-api 1.0-SNAPSHOT:
[INFO]
[INFO] b2b-account-api .................................SUCCESS [  2.509 s]
[INFO] b2b-order-api ...................................SUCCESS [  0.343 s]
[INFO] b2b-order-service ...............................SUCCESS [  0.340 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.455 s
[INFO] Finished at: 2019-11-20T16:46:45+08:00
[INFO] ------------------------------------------------------------------------

从上面输出中看一下反应堆列出的构建顺序:b2b-account-api、b2b-order-api、b2b-order-service。

上面过程给大家捋一捋:

上面命令先会运行-pl b2b-order-service得到一个反应堆列表:

b2b-order-service

然后后面又会执行am,这个命令会找到-pl b2b-order-service依赖的构件,也就是:

b2b-account-api
b2b-order-api

然后反应堆会对3个构件进行排序,得到一个正确的构件顺序,如下:

[INFO] Reactor Build Order:
[INFO]
[INFO] b2b-account-api                                                    [jar]
[INFO] b2b-order-api                                                      [jar]
[INFO] b2b-order-service                                                  [jar]

然后maven会依次对他们执行:

mvn clean install

案例6

分别执行下面2条mvn命令,先看一下效果:

mvn clean install
mvn clean install -rf b2b-order/b2b-order-service

输出中我们取出部分内容,如下。

第一条命令,反应堆产生的构建顺序是:

[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]

第2条命令,反应堆产生的构建顺序是:

[INFO] Reactor Build Order:
[INFO]
[INFO] b2b-order-service                                                  [jar]
[INFO] b2b-order                                                          [pom]
[INFO] b2b                                                                [pom]

在仔细看一下上面2条命令的差别,后面的命令多了-rf b2b-order/b2b-order-service,具体过程如下:

会先执行下面命令

mvn clean install

反应堆会计算出需要构件的模块顺序,如下:

[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]

-rf b2b-order/b2b-order-service对上面的反应堆构件顺序进行裁剪,将b2b-order/b2b-order-service前面的部分干掉,从b2b-order/b2b-order-service开始执行构建操作,所以剩下了3个需要构建的模块。

总结

  1. 需要掌握mvn命令中-pl、-am、-amd、-rf的各种用法

  2. 注意-pl后面的参数的写法:模块相对路径、或者[groupId].artifactId

还是那句话,上面这些用法大家会经常用到的,建议大家下去了多练练。看和操作,所获取到的是不能比的,看的过程中可能觉得一切都知道了,但是实际操作就不一样了,可能中间会遇到各种问题,然后自己会想办法解决这些问题,领会和学到的东西是不一样的!

Maven系列目录

  1. Maven系列:第1篇:Maven未出世前,我们那些痛苦的经历!

  2. Maven系列第2篇:安装、配置、mvn运行过程详解

  3. Maven系列第3篇:详解maven解决依赖问题

  4. Maven系列第4篇:仓库详解

  5. Maven系列第5篇:私服详解

  6. Maven系列第6篇:生命周期和插件详解,高手必备!

  7. Maven系列第7篇:聚合、继承、单继承问题详解,必备技能!

[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]

-rf b2b-order/b2b-order-service对上面的反应堆构件顺序进行裁剪,将b2b-order/b2b-order-service前面的部分干掉,从b2b-order/b2b-order-service开始执行构建操作,所以剩下了3个需要构建的模块。

总结

  1. 需要掌握mvn命令中-pl、-am、-amd、-rf的各种用法

  2. 注意-pl后面的参数的写法:模块相对路径、或者[groupId].artifactId

还是那句话,上面这些用法大家会经常用到的,建议大家下去了多练练。看和操作,所获取到的是不能比的,看的过程中可能觉得一切都知道了,但是实际操作就不一样了,可能中间会遇到各种问题,然后自己会想办法解决这些问题,领会和学到的东西是不一样的!

Maven系列目录

  1. Maven系列:第1篇:Maven未出世前,我们那些痛苦的经历!

  2. Maven系列第2篇:安装、配置、mvn运行过程详解

  3. Maven系列第3篇:详解maven解决依赖问题

  4. Maven系列第4篇:仓库详解

  5. Maven系列第5篇:私服详解

  6. Maven系列第6篇:生命周期和插件详解,高手必备!

  7. Maven系列第7篇:聚合、继承、单继承问题详解,必备技能!

你可能感兴趣的:(构建工具,maven,java)