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

star2017 1年前 ⋅ 282 阅读

maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能。

这是maven系列第8篇。

整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部有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所在目录执行下面命令:

  1. 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:b2b >------------------------
  157. [INFO] Building b2b 1.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 b2b 1.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 at: 2019-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 count, for instance 2.0C
  68. where C is core multiplied
  69. -U,--update-snapshots Forces a check for missing
  70. releases and updated snapshots on
  71. remote repositories
  72. -up,--update-plugins Ineffective, only kept for
  73. backward compatibility
  74. -v,--version Display version information
  75. -V,--show-version Display version information
  76. WITHOUT stopping build
  77. -X,--debug Produce execution debug output

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

-pl,—projects <arg>

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

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

举例:

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

  1. mvn clean install -pl b2b-account
  2. mvn clean install -pl b2b-account/b2b-account-api
  3. mvn clean install -pl b2b-account/b2b-account-api,b2b-account/b2b-account-service
  4. mvn clean install -pl :b2b-account-api,b2b-order/b2b-order-api
  5. mvn clean install -pl :b2b-account-api,:b2b-order-service

-rf,—resume-from <arg>

从指定的模块恢复反应堆

-am,—also-make

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

-amd,—also-make-dependents

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

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

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

案例1

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

  1. mvn clean install -pl b2b-account

效果如下:

  1. D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account
  2. [INFO] Scanning for projects...
  3. [INFO]
  4. [INFO] --------------------< com.javacode2018:b2b-account >--------------------
  5. [INFO] Building b2b-account 1.0-SNAPSHOT
  6. [INFO] --------------------------------[ pom ]---------------------------------
  7. [INFO]
  8. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account ---
  9. [INFO]
  10. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account ---
  11. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account\1.0-SNAPSHOT\b2b-account-1.0-SNAPSHOT.pom
  12. [INFO] ------------------------------------------------------------------------
  13. [INFO] BUILD SUCCESS
  14. [INFO] ------------------------------------------------------------------------
  15. [INFO] Total time: 0.907 s
  16. [INFO] Finished at: 2019-11-20T16:12:51+08:00
  17. [INFO] ------------------------------------------------------------------------

可以看到只构建了b2b-account

案例2

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

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

效果如下:

  1. D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account/b2b-account-api
  2. [INFO] Scanning for projects...
  3. [INFO]
  4. [INFO] ------------------< com.javacode2018:b2b-account-api >------------------
  5. [INFO] Building b2b-account-api 1.0-SNAPSHOT
  6. [INFO] --------------------------------[ jar ]---------------------------------
  7. [INFO]
  8. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api ---
  9. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target
  10. [INFO]
  11. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api ---
  12. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  13. [INFO] Copying 0 resource
  14. [INFO]
  15. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api ---
  16. [INFO] Nothing to compile - all classes are up to date
  17. [INFO]
  18. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api ---
  19. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  20. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources
  21. [INFO]
  22. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api ---
  23. [INFO] Nothing to compile - all classes are up to date
  24. [INFO]
  25. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api ---
  26. [INFO] No tests to run.
  27. [INFO]
  28. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api ---
  29. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar
  30. [INFO]
  31. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api ---
  32. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.jar
  33. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.pom
  34. [INFO] ------------------------------------------------------------------------
  35. [INFO] BUILD SUCCESS
  36. [INFO] ------------------------------------------------------------------------
  37. [INFO] Total time: 2.853 s
  38. [INFO] Finished at: 2019-11-20T16:14:37+08:00
  39. [INFO] ------------------------------------------------------------------------

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

  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,运行下面命令:

  1. mvn clean install -pl b2b-account/b2b-account-api,b2b-order/b2b-order-api

效果如下:

  1. D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account/b2b-account-api,b2b-order/b2b-order-api
  2. [INFO] Scanning for projects...
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Reactor Build Order:
  5. [INFO]
  6. [INFO] b2b-account-api [jar]
  7. [INFO] b2b-order-api [jar]
  8. [INFO]
  9. [INFO] ------------------< com.javacode2018:b2b-account-api >------------------
  10. [INFO] Building b2b-account-api 1.0-SNAPSHOT [1/2]
  11. [INFO] --------------------------------[ jar ]---------------------------------
  12. [INFO]
  13. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api ---
  14. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target
  15. [INFO]
  16. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api ---
  17. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  18. [INFO] Copying 0 resource
  19. [INFO]
  20. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api ---
  21. [INFO] Nothing to compile - all classes are up to date
  22. [INFO]
  23. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api ---
  24. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  25. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources
  26. [INFO]
  27. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api ---
  28. [INFO] Nothing to compile - all classes are up to date
  29. [INFO]
  30. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api ---
  31. [INFO] No tests to run.
  32. [INFO]
  33. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api ---
  34. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar
  35. [INFO]
  36. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api ---
  37. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.jar
  38. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.pom
  39. [INFO]
  40. [INFO] -------------------< com.javacode2018:b2b-order-api >-------------------
  41. [INFO] Building b2b-order-api 1.0-SNAPSHOT [2/2]
  42. [INFO] --------------------------------[ jar ]---------------------------------
  43. [INFO]
  44. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-api ---
  45. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target
  46. [INFO]
  47. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-api ---
  48. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  49. [INFO] Copying 0 resource
  50. [INFO]
  51. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-api ---
  52. [INFO] Nothing to compile - all classes are up to date
  53. [INFO]
  54. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-api ---
  55. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  56. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\src\test\resources
  57. [INFO]
  58. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-api ---
  59. [INFO] Nothing to compile - all classes are up to date
  60. [INFO]
  61. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-api ---
  62. [INFO] No tests to run.
  63. [INFO]
  64. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-api ---
  65. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar
  66. [INFO]
  67. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-api ---
  68. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.jar
  69. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.pom
  70. [INFO] ------------------------------------------------------------------------
  71. [INFO] Reactor Summary for b2b-account-api 1.0-SNAPSHOT:
  72. [INFO]
  73. [INFO] b2b-account-api .................................... SUCCESS [ 2.874 s]
  74. [INFO] b2b-order-api ...................................... SUCCESS [ 0.393 s]
  75. [INFO] ------------------------------------------------------------------------
  76. [INFO] BUILD SUCCESS
  77. [INFO] ------------------------------------------------------------------------
  78. [INFO] Total time: 3.554 s
  79. [INFO] Finished at: 2019-11-20T16:15:57+08:00
  80. [INFO] ------------------------------------------------------------------------

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

案例4

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

  1. b2b-account-api
  2. b2b-account-service
  3. b2b-order-service

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

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

我们看一下效果:

  1. D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-account/b2b-account-api -amd
  2. [INFO] Scanning for projects...
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Reactor Build Order:
  5. [INFO]
  6. [INFO] b2b-account-api [jar]
  7. [INFO] b2b-account-service [jar]
  8. [INFO] b2b-order-service [jar]
  9. [INFO]
  10. [INFO] ------------------< com.javacode2018:b2b-account-api >------------------
  11. [INFO] Building b2b-account-api 1.0-SNAPSHOT [1/3]
  12. [INFO] --------------------------------[ jar ]---------------------------------
  13. [INFO]
  14. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api ---
  15. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target
  16. [INFO]
  17. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api ---
  18. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  19. [INFO] Copying 0 resource
  20. [INFO]
  21. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api ---
  22. [INFO] Nothing to compile - all classes are up to date
  23. [INFO]
  24. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api ---
  25. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  26. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources
  27. [INFO]
  28. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api ---
  29. [INFO] Nothing to compile - all classes are up to date
  30. [INFO]
  31. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api ---
  32. [INFO] No tests to run.
  33. [INFO]
  34. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api ---
  35. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar
  36. [INFO]
  37. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api ---
  38. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.jar
  39. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.pom
  40. [INFO]
  41. [INFO] ----------------< com.javacode2018:b2b-account-service >----------------
  42. [INFO] Building b2b-account-service 1.0-SNAPSHOT [2/3]
  43. [INFO] --------------------------------[ jar ]---------------------------------
  44. [INFO]
  45. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-service ---
  46. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target
  47. [INFO]
  48. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-service ---
  49. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  50. [INFO] Copying 0 resource
  51. [INFO]
  52. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-service ---
  53. [INFO] Nothing to compile - all classes are up to date
  54. [INFO]
  55. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-service ---
  56. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  57. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\src\test\resources
  58. [INFO]
  59. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-service ---
  60. [INFO] Nothing to compile - all classes are up to date
  61. [INFO]
  62. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-service ---
  63. [INFO] No tests to run.
  64. [INFO]
  65. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-service ---
  66. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target\b2b-account-service-1.0-SNAPSHOT.jar
  67. [INFO]
  68. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-service ---
  69. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\target\b2b-account-service-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-service\1.0-SNAPSHOT\b2b-account-service-1.0-SNAPSHOT.jar
  70. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-service\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-service\1.0-SNAPSHOT\b2b-account-service-1.0-SNAPSHOT.pom
  71. [INFO]
  72. [INFO] -----------------< com.javacode2018:b2b-order-service >-----------------
  73. [INFO] Building b2b-order-service 1.0-SNAPSHOT [3/3]
  74. [INFO] --------------------------------[ jar ]---------------------------------
  75. [INFO]
  76. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-service ---
  77. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target
  78. [INFO]
  79. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-service ---
  80. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  81. [INFO] Copying 0 resource
  82. [INFO]
  83. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-service ---
  84. [INFO] Nothing to compile - all classes are up to date
  85. [INFO]
  86. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-service ---
  87. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  88. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\src\test\resources
  89. [INFO]
  90. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-service ---
  91. [INFO] Nothing to compile - all classes are up to date
  92. [INFO]
  93. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-service ---
  94. [INFO] No tests to run.
  95. [INFO]
  96. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-service ---
  97. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar
  98. [INFO]
  99. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-service ---
  100. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.jar
  101. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.pom
  102. [INFO] ------------------------------------------------------------------------
  103. [INFO] Reactor Summary for b2b-account-api 1.0-SNAPSHOT:
  104. [INFO]
  105. [INFO] b2b-account-api .................................... SUCCESS [ 2.440 s]
  106. [INFO] b2b-account-service ................................ SUCCESS [ 0.381 s]
  107. [INFO] b2b-order-service .................................. SUCCESS [ 0.364 s]
  108. [INFO] ------------------------------------------------------------------------
  109. [INFO] BUILD SUCCESS
  110. [INFO] ------------------------------------------------------------------------
  111. [INFO] Total time: 3.508 s
  112. [INFO] Finished at: 2019-11-20T16:05:00+08:00
  113. [INFO] ------------------------------------------------------------------------

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

上面过程给大家捋一捋:

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

  1. 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会依次对他们执行:

  1. mvn clean install

案例5

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

可以使用下面命令:

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

效果如下:

  1. D:\code\IdeaProjects\b2b>mvn clean install -pl b2b-order/b2b-order-service -am
  2. [INFO] Scanning for projects...
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Reactor Build Order:
  5. [INFO]
  6. [INFO] b2b-account-api [jar]
  7. [INFO] b2b-order-api [jar]
  8. [INFO] b2b-order-service [jar]
  9. [INFO]
  10. [INFO] ------------------< com.javacode2018:b2b-account-api >------------------
  11. [INFO] Building b2b-account-api 1.0-SNAPSHOT [1/3]
  12. [INFO] --------------------------------[ jar ]---------------------------------
  13. [INFO]
  14. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-account-api ---
  15. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target
  16. [INFO]
  17. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-account-api ---
  18. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  19. [INFO] Copying 0 resource
  20. [INFO]
  21. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-account-api ---
  22. [INFO] Nothing to compile - all classes are up to date
  23. [INFO]
  24. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-account-api ---
  25. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  26. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\src\test\resources
  27. [INFO]
  28. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-account-api ---
  29. [INFO] Nothing to compile - all classes are up to date
  30. [INFO]
  31. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-account-api ---
  32. [INFO] No tests to run.
  33. [INFO]
  34. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-account-api ---
  35. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar
  36. [INFO]
  37. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-account-api ---
  38. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\target\b2b-account-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.jar
  39. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-account\b2b-account-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-account-api\1.0-SNAPSHOT\b2b-account-api-1.0-SNAPSHOT.pom
  40. [INFO]
  41. [INFO] -------------------< com.javacode2018:b2b-order-api >-------------------
  42. [INFO] Building b2b-order-api 1.0-SNAPSHOT [2/3]
  43. [INFO] --------------------------------[ jar ]---------------------------------
  44. [INFO]
  45. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-api ---
  46. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target
  47. [INFO]
  48. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-api ---
  49. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  50. [INFO] Copying 0 resource
  51. [INFO]
  52. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-api ---
  53. [INFO] Nothing to compile - all classes are up to date
  54. [INFO]
  55. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-api ---
  56. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  57. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\src\test\resources
  58. [INFO]
  59. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-api ---
  60. [INFO] Nothing to compile - all classes are up to date
  61. [INFO]
  62. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-api ---
  63. [INFO] No tests to run.
  64. [INFO]
  65. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-api ---
  66. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar
  67. [INFO]
  68. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-api ---
  69. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\target\b2b-order-api-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.jar
  70. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-api\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-api\1.0-SNAPSHOT\b2b-order-api-1.0-SNAPSHOT.pom
  71. [INFO]
  72. [INFO] -----------------< com.javacode2018:b2b-order-service >-----------------
  73. [INFO] Building b2b-order-service 1.0-SNAPSHOT [3/3]
  74. [INFO] --------------------------------[ jar ]---------------------------------
  75. [INFO]
  76. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ b2b-order-service ---
  77. [INFO] Deleting D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target
  78. [INFO]
  79. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ b2b-order-service ---
  80. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  81. [INFO] Copying 0 resource
  82. [INFO]
  83. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ b2b-order-service ---
  84. [INFO] Nothing to compile - all classes are up to date
  85. [INFO]
  86. [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ b2b-order-service ---
  87. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
  88. [INFO] skip non existing resourceDirectory D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\src\test\resources
  89. [INFO]
  90. [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ b2b-order-service ---
  91. [INFO] Nothing to compile - all classes are up to date
  92. [INFO]
  93. [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ b2b-order-service ---
  94. [INFO] No tests to run.
  95. [INFO]
  96. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ b2b-order-service ---
  97. [INFO] Building jar: D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar
  98. [INFO]
  99. [INFO] --- maven-install-plugin:2.4:install (default-install) @ b2b-order-service ---
  100. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\target\b2b-order-service-1.0-SNAPSHOT.jar to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.jar
  101. [INFO] Installing D:\code\IdeaProjects\b2b\b2b-order\b2b-order-service\pom.xml to C:\Users\Think\.m2\repository\com\javacode2018\b2b-order-service\1.0-SNAPSHOT\b2b-order-service-1.0-SNAPSHOT.pom
  102. [INFO] ------------------------------------------------------------------------
  103. [INFO] Reactor Summary for b2b-account-api 1.0-SNAPSHOT:
  104. [INFO]
  105. [INFO] b2b-account-api .................................... SUCCESS [ 2.509 s]
  106. [INFO] b2b-order-api ...................................... SUCCESS [ 0.343 s]
  107. [INFO] b2b-order-service .................................. SUCCESS [ 0.340 s]
  108. [INFO] ------------------------------------------------------------------------
  109. [INFO] BUILD SUCCESS
  110. [INFO] ------------------------------------------------------------------------
  111. [INFO] Total time: 3.455 s
  112. [INFO] Finished at: 2019-11-20T16:46:45+08:00
  113. [INFO] ------------------------------------------------------------------------

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

上面过程给大家捋一捋:

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

  1. 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会依次对他们执行:

  1. 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,具体过程如下:

会先执行下面命令

  1. 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

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

最新资料

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: