Maven笔记 - 第七章

第7篇:聚合、继承、裁剪详解

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

这是maven系列第7篇。

整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部有maven完整系列的连接。

本篇内容

  1. maven中聚合详解

  2. maven中继承详解

  3. pom.xml中parent元素的使用详解

  4. pom.xml中dependencyManagement元素使用详解

  5. pom.xml中pluginManagement元素使用详解

  6. 单继承存在的问题及解决方案详解(springboot,springcloud中会常用)

  7. 解答上一篇遗留的2个问题

聚合

原始需求

我们需要使用java做一个电商网站,涉及到:pc端网站、h5微站、移动端接口部分,那么我们可以使用maven创建3个项目用于这3块业务的开发,3个项目名称如下:

javacode2018-pc
javacode2018-h5
javacode2018-api

这3个项目的groupId都是com.javacode2018,artifactId取上面的,我们使用maven来搭建项目结构。

实现

创建第一个javacode2018-pc项目

打开idea,点击File->New->Project,选择Maven,如下:

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

点击Next,输入项目坐标信息,如下:

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

点击Next,输入Project name 为javacode2018-pc,如下:

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

点击Finish,创建成功,如下:

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

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

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

点击上面的OK完成配置。

大家再按照上面一样的操作,分别创建另外2个项目javacode2018-h5javacode2018-api,创建完成之后,另外2个项目如下图:

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

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

上面3个项目由整个项目组6个人共同开发,这几个项目经常一起上线,上线过程,先由开发进行打包,然后将几个包发给运行进行发布。我们使用mvn package进行打包,需要在每个项目的pom.xml所在目录都去执行一次这个命令,也就是说需要执行3次,这个电商项目还会涉及到后台系统、bi系统、监控系统等等,可能最后会多达10个小项目,那时候我们每次上线都需要执行10次打包操作,这个过程是相当繁琐的。

那么maven有没有更好的办法来解决这个事情呢?

这个用到的就是我们本次要说的maven中的聚合

整个电商我们可以作为一个大的系统,上面的pc端、h5微站、api接口、后台系统、bi系统、监控系统都可以作为里面的一个具体比较大一个模块。

我们使用maven聚合功能来实现上面的需求,我们需要创建一个额外的maven项目javacode-aggregator来管理上面3个项目,然后只用在javacode-aggregator项目中执行mvn命令,就会自动为其他3个项目自动执行同样的mvn命令。

Maven聚合

maven聚合需要创建一个新的maven项目,
用来管理其他的maven构件模块,新的maven项目中加入如下配置:


	模块1
	模块2
	模块n

pom

新的项目中执行任何mvn命令,都会modules中包含的所有模块执行同样的命令,而被包含的模块不需要做任何特殊的配置,正常的maven项目就行。

注意上面的module元素,这部分是被聚合的模块pom.xml所在目录的相对路径。

package的值必须为pom,这个需要注意。

下面看案例。

实操案例

下面过程仔细看了。

创建项目javacode-aggregator

打开idea,点击File->New->Project,选择Maven,如下:

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

点击Next,输入项目坐标信息,如下:

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

点击Next,输入Project name 为javacode-aggregator,如下:

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

点击Finish,创建成功,如下:

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

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

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

删除下面无用的代码:

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

项目变成了下面这样:

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

pom.xml中加入下面配置:

pom

最后pom.xml内容如下:

 version="1.0" encoding="UTF-8"
 xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    4.0.0

    com.javacode2018
    javacode-aggregator
    1.0-SNAPSHOT
    pom
创建javacode2018-pc 模块

注意这里说的是模块,不再是创建项目,过程仔细看。

idea中选中javacode-aggregator

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

点击File->New->Module,准备创建模块,如下图:

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

选择Maven,如图:

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

点击Next,如下:

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

点击下面的...按钮,选择None,如下:

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

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

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

输入坐标信息,如下:

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

点击Next,输入Module name :javacode2018-pc,如下:

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

点击Finish,完成javacode-2018模块的创建,如下:

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

我们来看一下javacode-aggregator的pom.xml,多了一部分,如下:

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

注意上面的<packaging>pom</packaging>

创建javacode2018-h5模块

创建步骤和上面javacode2018-pc步骤一样。

创建javacode2018-api模块

创建步骤和上面javacode2018-pc步骤一样。

我们看一下项目最终结构,如下图:

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

看一下上图中的javacode-aggregator项目的pom.xmlmodules元素中多出了3部分。

再来看看其他3个模块的pom文件,和普通的pom.xml一样,如下图:

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

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

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

javacode-aggregator/pom.xml目录中执行mvn package感受一下效果:

D:\code\IdeaProjects\javacode-aggregator>mvn 
[INFO] Scanning  projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] javacode2018-pc                                                    [jar]
[INFO] javacode2018-h5                                                    [jar]
[INFO] javacode2018-api                                                   [jar]
[INFO] javacode-aggregator                                                [pom]
[INFO]
[INFO] ------------------< com.javacode2018:javacode2018-pc >------------------
[INFO] Building javacode2018-pc 1.0-SNAPSHOT                              [1/4]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-resources) @ javacode2018-pc ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (-compile) @ javacode2018-pc ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-testResources) @ javacode2018-pc ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode-aggregator\javacode2018-pc\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (-testCompile) @ javacode2018-pc ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ javacode2018-pc ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-jar) @ javacode2018-pc ---
[INFO] Building jar: D:\code\IdeaProjects\javacode-aggregator\javacode2018-pc\target\javacode2018-pc-1.0-SNAPSHOT.jar
[INFO]
[INFO] ------------------< com.javacode2018:javacode2018-h5 >------------------
[INFO] Building javacode2018-h5 1.0-SNAPSHOT                              [2/4]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-resources) @ javacode2018-h5 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (-compile) @ javacode2018-h5 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-testResources) @ javacode2018-h5 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode-aggregator\javacode2018-h5\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (-testCompile) @ javacode2018-h5 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ javacode2018-h5 ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-jar) @ javacode2018-h5 ---
[INFO] Building jar: D:\code\IdeaProjects\javacode-aggregator\javacode2018-h5\target\javacode2018-h5-1.0-SNAPSHOT.jar
[INFO]
[INFO] -----------------< com.javacode2018:javacode2018-api >------------------
[INFO] Building javacode2018-api 1.0-SNAPSHOT                             [3/4]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (-resources) @ javacode2018-api ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (-compile) @ javacode2018-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (-testResources) @ javacode2018-api ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\code\IdeaProjects\javacode-aggregator\javacode2018-api\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (-testCompile) @ javacode2018-api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (-test) @ javacode2018-api ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (-jar) @ javacode2018-api ---
[INFO] Building jar: D:\code\IdeaProjects\javacode-aggregator\javacode2018-api\target\javacode2018-api-1.0-SNAPSHOT.jar
[INFO]
[INFO] ----------------< com.javacode2018:javacode-aggregator >----------------
[INFO] Building javacode-aggregator 1.0-SNAPSHOT                          [4/4]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary  javacode-aggregator 1.0-SNAPSHOT:
[INFO]
[INFO] javacode2018-pc .................................SUCCESS [  2.542 s]
[INFO] javacode2018-h5 .................................SUCCESS [  0.195 s]
[INFO] javacode2018-api ................................SUCCESS [  0.218 s]
[INFO] javacode-aggregator .............................SUCCESS [  0.024 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.223 s
[INFO] Finished at: 2019-11-19T13:28:00+08:00
[INFO] ------------------------------------------------------------------------

我们分析一下上面的输出:

[INFO] Reactor Build Order:
[INFO]
[INFO] javacode2018-pc                                                    [jar]
[INFO] javacode2018-h5                                                    [jar]
[INFO] javacode2018-api                                                   [jar]
[INFO] javacode-aggregator                                                [pom]

上面这个列出了需要构件的maven构件列表及顺序,共有4个构件,3个jar包,1个pom类型的构件。

然后开始按照上面列出的顺序,一个个开始执行mvn package命令,最后4个都执行成功了,我们来看一下最终产生的效果,如下图:

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

从上图中我们可以看到3个模块都生成了jar包,说明我们执行了一次mvn package,分别在3个模块中都运行了,我们在来执行一下mvn clean清理代码,感受一下最终效果:

D:\co
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值