• Maven系列第8篇:大型Maven项目,快速按需任意构建


    本篇涉及到的内容属于神技能,多数使用maven的人都经常想要的一种功能,但是大多数人都不知道如何使用,废话不多说,上干货。

    需求背景

    我们需要做一个电商项目,一般都会做成微服务的形式,按业务进行划分,本次我们主要以账户业务订单业务为例,我们将这两块业务分别作为2个大的模块来开发,而订单模块又会调用账户模块中的接口,所以对账户模块接口部分会有依赖。

    我们以maven来搭建项目,项目的目录结构如下:

    1. b2b
    2.     b2b-account
    3.         b2b-account-api
    4.         b2b-account-service
    5.     b2b-order
    6.         b2b-order-api
    7.         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 Nameb2b,如下图:

    图片

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

    图片

    删除下图中无用的代码:

    图片

    变成了下面这样:

    图片

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

    图片

    点击上面的OK完成配置。

    在b2b下创建b2b-account模块

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

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

    图片

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

    图片

    选择Maven,如下图:

    图片

    点击Next,如下图:

    图片

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

    图片

    图片

    图片

    输入坐标信息,如下图:

    图片

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

    图片

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

    图片

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

    图片

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

    图片

    在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中加入下面配置:

    1. <dependencies>
    2.     <dependency>
    3.         <groupId>${project.groupId}</groupId>
    4.         <artifactId>b2b-account-api</artifactId>
    5.         <version>${project.version}</version>
    6.     </dependency>
    7. </dependencies>

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

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

    1. <dependencies>
    2.     <dependency>
    3.         <groupId>${project.groupId}</groupId>
    4.         <artifactId>b2b-account-api</artifactId>
    5.         <version>${project.version}</version>
    6.     </dependency>
    7.     <dependency>
    8.         <groupId>${project.groupId}</groupId>
    9.         <artifactId>b2b-order-api</artifactId>
    10.         <version>${project.version}</version>
    11.     </dependency>
    12. </dependencies>
    此时每个模块pom.xml如下
    b2b/pom.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5.     <modelVersion>4.0.0</modelVersion>
    6.     <groupId>com.javacode2018</groupId>
    7.     <artifactId>b2b</artifactId>
    8.     <packaging>pom</packaging>
    9.     <version>1.0-SNAPSHOT</version>
    10.     <modules>
    11.         <module>b2b-account</module>
    12.         <module>b2b-order</module>
    13.     </modules>
    14. </project>
    b2b-account/pom.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5.     <modelVersion>4.0.0</modelVersion>
    6.     <groupId>com.javacode2018</groupId>
    7.     <artifactId>b2b-account</artifactId>
    8.     <packaging>pom</packaging>
    9.     <version>1.0-SNAPSHOT</version>
    10.     <modules>
    11.         <module>b2b-account-api</module>
    12.         <module>b2b-account-service</module>
    13.     </modules>
    14. </project>
    b2b-account-api/pom.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5.     <modelVersion>4.0.0</modelVersion>
    6.     <groupId>com.javacode2018</groupId>
    7.     <artifactId>b2b-account-api</artifactId>
    8.     <version>1.0-SNAPSHOT</version>
    9. </project>
    b2b-account-service/pom.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5.     <modelVersion>4.0.0</modelVersion>
    6.     <groupId>com.javacode2018</groupId>
    7.     <artifactId>b2b-account-service</artifactId>
    8.     <version>1.0-SNAPSHOT</version>
    9.     <dependencies>
    10.         <dependency>
    11.             <groupId>${project.groupId}</groupId>
    12.             <artifactId>b2b-account-api</artifactId>
    13.             <version>${project.version}</version>
    14.         </dependency>
    15.     </dependencies>
    16. </project>
    b2b-order/pom.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5.     <modelVersion>4.0.0</modelVersion>
    6.     <groupId>com.javacode2018</groupId>
    7.     <artifactId>b2b-order</artifactId>
    8.     <packaging>pom</packaging>
    9.     <version>1.0-SNAPSHOT</version>
    10.     <modules>
    11.         <module>b2b-order-api</module>
    12.         <module>b2b-order-service</module>
    13.     </modules>
    14. </project>
    b2b-order-api/pom.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5.     <modelVersion>4.0.0</modelVersion>
    6.     <groupId>com.javacode2018</groupId>
    7.     <artifactId>b2b-order-api</artifactId>
    8.     <version>1.0-SNAPSHOT</version>
    9. </project>
    b2b-order-service/pom.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5.     <modelVersion>4.0.0</modelVersion>
    6.     <groupId>com.javacode2018</groupId>
    7.     <artifactId>b2b-order-service</artifactId>
    8.     <version>1.0-SNAPSHOT</version>
    9.     <dependencies>
    10.         <dependency>
    11.             <groupId>${project.groupId}</groupId>
    12.             <artifactId>b2b-account-api</artifactId>
    13.             <version>${project.version}</version>
    14.         </dependency>
    15.         <dependency>
    16.             <groupId>${project.groupId}</groupId>
    17.             <artifactId>b2b-order-api</artifactId>
    18.             <version>${project.version}</version>
    19.         </dependency>
    20.     </dependencies>
    21. </project>

    注意:上面项目的结构属于父子结构,使用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
    

    我们来感受一下这个命令的效果:

    1. D:\code\IdeaProjects\b2b>mvn clean install
    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-account                                                        [pom]
    9. [INFO] b2b-order-api                                                      [jar]
    10. [INFO] b2b-order-service                                                  [jar]
    11. [INFO] b2b-order                                                          [pom]
    12. [INFO] b2b                                                                [pom]
    13. [INFO]
    14. [INFO] ------------------< com.javacode2018:b2b-account-api >------------------
    15. [INFO] Building b2b-account-api 1.0-SNAPSHOT                              [1/7]
    16. [INFO] --------------------------------[ jar ]---------------------------------
    17. [INFO]
    18. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api ---
    19. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target
    20. [INFO]
    21. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api ---
    22. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
    23. [INFO] Copying 0 resource
    24. [INFO]
    25. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api ---
    26. [INFO] Nothing to compile - all classes are up to date
    27. [INFO]
    28. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api ---
    29. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
    30. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources
    31. [INFO]
    32. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api ---
    33. [INFO] Nothing to compile - all classes are up to date
    34. [INFO]
    35. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api ---
    36. [INFO] No tests to run.
    37. [INFO]
    38. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api ---
    39. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar
    40. [INFO]
    41. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api ---
    42. [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
    43. [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
    44. [INFO]
    45. [INFO] ----------------< com.javacode2018:b2b-account-service >----------------
    46. [INFO] Building b2b-account-service 1.0-SNAPSHOT                          [2/7]
    47. [INFO] --------------------------------[ jar ]---------------------------------
    48. [INFO]
    49. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-service ---
    50. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target
    51. [INFO]
    52. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-service ---
    53. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
    54. [INFO] Copying 0 resource
    55. [INFO]
    56. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-service ---
    57. [INFO] Nothing to compile - all classes are up to date
    58. [INFO]
    59. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-service ---
    60. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
    61. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\src\test\resources
    62. [INFO]
    63. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-service ---
    64. [INFO] Nothing to compile - all classes are up to date
    65. [INFO]
    66. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-service ---
    67. [INFO] No tests to run.
    68. [INFO]
    69. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-service ---
    70. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target\b2b-account-service-1.0-SNAPSHOT.jar
    71. [INFO]
    72. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-service ---
    73. [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
    74. [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
    75. [INFO]
    76. [INFO] --------------------< com.javacode2018:b2b-account >--------------------
    77. [INFO] Building b2b-account 1.0-SNAPSHOT                                  [3/7]
    78. [INFO] --------------------------------[ pom ]---------------------------------
    79. [INFO]
    80. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account ---
    81. [INFO]
    82. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account ---
    83. [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
    84. [INFO]
    85. [INFO] -------------------< com.javacode2018:b2b-order-api >-------------------
    86. [INFO] Building b2b-order-api 1.0-SNAPSHOT                                [4/7]
    87. [INFO] --------------------------------[ jar ]---------------------------------
    88. [INFO]
    89. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-api ---
    90. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target
    91. [INFO]
    92. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-api ---
    93. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
    94. [INFO] Copying 0 resource
    95. [INFO]
    96. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-api ---
    97. [INFO] Nothing to compile - all classes are up to date
    98. [INFO]
    99. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-api ---
    100. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
    101. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\src\test\resources
    102. [INFO]
    103. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-api ---
    104. [INFO] Nothing to compile - all classes are up to date
    105. [INFO]
    106. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-api ---
    107. [INFO] No tests to run.
    108. [INFO]
    109. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-api ---
    110. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar
    111. [INFO]
    112. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-api ---
    113. [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
    114. [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
    115. [INFO]
    116. [INFO] -----------------< com.javacode2018:b2b-order-service >-----------------
    117. [INFO] Building b2b-order-service 1.0-SNAPSHOT                            [5/7]
    118. [INFO] --------------------------------[ jar ]---------------------------------
    119. [INFO]
    120. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-service ---
    121. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target
    122. [INFO]
    123. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-service ---
    124. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
    125. [INFO] Copying 0 resource
    126. [INFO]
    127. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-service ---
    128. [INFO] Nothing to compile - all classes are up to date
    129. [INFO]
    130. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-service ---
    131. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
    132. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\src\test\resources
    133. [INFO]
    134. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-service ---
    135. [INFO] Nothing to compile - all classes are up to date
    136. [INFO]
    137. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-service ---
    138. [INFO] No tests to run.
    139. [INFO]
    140. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-service ---
    141. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar
    142. [INFO]
    143. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-service ---
    144. [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
    145. [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
    146. [INFO]
    147. [INFO] ---------------------< com.javacode2018:b2b-order >---------------------
    148. [INFO] Building b2b-order 1.0-SNAPSHOT                                    [6/7]
    149. [INFO] --------------------------------[ pom ]---------------------------------
    150. [INFO]
    151. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order ---
    152. [INFO]
    153. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order ---
    154. [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
    155. [INFO]
    156. [INFO] ------------------------< com.javacode2018:b2>------------------------
    157. [INFO] Building b21.0-SNAPSHOT                                          [7/7]
    158. [INFO] --------------------------------[ pom ]---------------------------------
    159. [INFO]
    160. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b ---
    161. [INFO]
    162. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b ---
    163. [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
    164. [INFO] ------------------------------------------------------------------------
    165. [INFO] Reactor Summary for b21.0-SNAPSHOT:
    166. [INFO]
    167. [INFO] b2b-account-api .................................... SUCCESS [  1.806 s]
    168. [INFO] b2b-account-service ................................ SUCCESS [  0.298 s]
    169. [INFO] b2b-account ........................................ SUCCESS [  0.082 s]
    170. [INFO] b2b-order-api ...................................... SUCCESS [  0.229 s]
    171. [INFO] b2b-order-service .................................. SUCCESS [  0.254 s]
    172. [INFO] b2b-order .......................................... SUCCESS [  0.058 s]
    173. [INFO] b2b ................................................ SUCCESS [  0.069 s]
    174. [INFO] ------------------------------------------------------------------------
    175. [INFO] BUILD SUCCESS
    176. [INFO] ------------------------------------------------------------------------
    177. [INFO] Total time:  3.072 s
    178. [INFO] Finished at2019-11-20T16:03:27+08:00
    179. [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-apib2b-account-serviceb2b-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 countfor 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表示多个模块,之间用逗号分开,模块有两种写法

    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

    从指定的模块恢复反应堆

    -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 at2019-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 at2019-11-20T16:14:37+08:00
    39. [INFO] ------------------------------------------------------------------------

    上面使用的是相对路径的写法,还有2种写法,大家可以去试试,如下:

    1. mvn clean install -pl :b2b-account-api
    2. 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 at2019-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 at2019-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-apib2b-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 at2019-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个需要构建的模块。

    总结

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

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

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

  • 相关阅读:
    Python学习:构造函数与析构函数
    Tableau 入门系列之各种图形绘制
    WIFI功耗计算器
    Java中JCP, JEP, JLS, JSR是什么
    OpenGL_Learn13(材质)
    链表oj (7.29)
    前端 js面试题(二)
    Fastjson 1.2.24反序列化漏洞(Vulhub)使用方法
    重写与重载笔记
    基于风驱动优化的BP神经网络(分类应用) - 附代码
  • 原文地址:https://blog.csdn.net/weixin_46228112/article/details/133949490