当前位置: 首页 > news >正文

【转】Maven实战(九)---模块聚合和继承

原博文出自于:http://blog.csdn.net/liutengteng130/article/details/47001831   感谢!

 

 

   类之间有聚合和继承关系,Maven也具备这样的设计原则。那么Mavenpom是如何进行聚合与继承的呢?

 

一、什么是聚合?为什么要用聚合?

       上一篇博客介绍了模块化的基本知识。有了模块化,那么我们项目中会有很多模块,每个模块都是独立的maven project,如果项目不大,我们还可以独立的编译测试运行每个模块,但是随着项目越来越大,我们不得不想办法让我们的工作变得简单,这时就出现了Maven聚合的方式来完成编译所有模块。

       聚合:把多个模块或项目聚合到一期,我们可以建立一个专门负责聚合工作的project.

        Maven聚合:当我们的模块非常多的时候,我们想要一次构建多个项目,而不是到多个模块的目录下分别执行命令。Maven的聚合特性就是为该需求服务的。

 

 

 

Pom.xml

<parent>
<groupId>com.tgb</groupId>
<artifactId>itoo-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 继承itoo-root的pom文件 -->
<relativePath>../itoo-root/pom.xml</relativePath>
</parent>

<artifactId>itoo-basic-parent</artifactId>
<packaging>pom</packaging>
<modules>
<module>../itoo-basic-api</module>
<module>../itoo-basic-institution-core</module>
<module>../itoo-basic-institution-web</module>
<module>../itoo-basic-institution-ear</module>
</modules>

 

 

 

 

Maven约定:

1、首先聚合模块必须为pom,否则无法构建

2、必须有<modules>元素,它是实现聚合的最核心配置。这里可以声明多个module元素。每个module的值都是一个当前pom的相对目录。模块所处的目录必须和<module>模块所处的目录一致。

3、为了方便用户构建项目,通常将聚合模块放在项目目录的最顶层,其他模块则作为聚合模块的子目录存在。

4、聚合模块的pom没有实质性内容,只有一个pom.xml文件。只是用来帮助其他模块构建的工具。

 

maven构建:

         maven首先解析聚合模块pom、分析要构建的模块、并计算出一个反应堆构建顺序,然后根据这个顺序依次构建各个模块。反应堆是所有模块组成的一个构建结构。

 

 

 

 

 

二、继承

           Maven继承也是为了防止重复,让项目的jar包版本一致,在项目管理上起了很大的作用。

比如说相同的jar包我们每个人都需要依赖一遍,并且每个人引用的版本号不同,势必造成项目混乱,运行出问题。

1、子模块省略grouopIdversion,都会从父模块依赖下来。

2、子模块元素pom.xml

 

 

 

<parent>
<groupId>com.tgb</groupId>
<artifactId>itoo-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 继承itoo-root的pom文件 -->
<relativePath>../itoo-root/pom.xml</relativePath>
</parent>

 

  随之而来的问题,如果我创建了一个模块不需要依赖父类的依赖,这时候我们需要用Maven的依赖管理来解决这个问题。即dependencyManagement。见

Maven实战(六)---dependencies与dependencyManagement的区别

 

 

 

三、总结

          对于聚合模块来说,它知道有哪些被聚合的模块,而对于被聚合的模块来说,它们不知道被谁聚合了,也不知道它的存在;对于继承关系的pom来说,它不知道被哪些模块继承了,对于子pom来说,它必须知道要继承谁。


 

        总之,聚合是为了方便快速构建项目,继承是为了消除重复配置,在简化pom的同时还能促进各个模块配置的一致性。共同点是两者的packaging都是pom,聚合模块与继承关系中的父模块除了pom之外都没有实际内容。

 

       实际项目中我们会发现,一个pom既是聚合pom,也是父pom,这么做主要是为了方便。

 

           Java成功的重要原因之一就是他能够屏蔽大部分操作系统的差异,XML流行的原因之一是所有语言都接受他。Maven用的人越来越多是Maven提倡约定优于配置,这是Maven最核心的设计理念之一。

 

转载于:https://www.cnblogs.com/zlslch/p/6033667.html

相关文章:

  • TCP系列47—拥塞控制—10、FACK下的快速恢复与PRR
  • webpack常用加载器和插件
  • Android Studio-导入External Libraries
  • Win7 + VS2015 + CMake3.6.1-GUI + Makefile 编译开源库
  • [工具]利用EasyRTSPClient工具检查摄像机RTSP流不能播放原因以及排查音视频数据无法播放问题...
  • web前端:css基本操作
  • DUILIB圆形头象
  • #include
  • The content of element type configuration must match (properties?,settings?,typeAliases?,typeHa...
  • xCode8支持iOS7.0
  • C#跨窗体传值的几种方法分析(很详细)
  • 数据结构:二叉树的链式存储
  • 用正则表示式分析网页
  • iOS AFNetworking 打印从服务器返回的错误提示信息
  • Ubuntu16.04安装网易云音乐
  • [PHP内核探索]PHP中的哈希表
  • .pyc 想到的一些问题
  • android图片蒙层
  • Angular 响应式表单之下拉框
  • Angularjs之国际化
  • css选择器
  • HTML5新特性总结
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • MySQL几个简单SQL的优化
  • PHP那些事儿
  • SAP云平台里Global Account和Sub Account的关系
  • Spring声明式事务管理之一:五大属性分析
  • Vue ES6 Jade Scss Webpack Gulp
  • vue的全局变量和全局拦截请求器
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 通过npm或yarn自动生成vue组件
  • Prometheus VS InfluxDB
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • (06)金属布线——为半导体注入生命的连接
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)c++ std::pair 与 std::make
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net core 6.0 升8.0
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 的字符串暂存池
  • .NET程序员迈向卓越的必由之路
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @Mapper作用
  • [1204 寻找子串位置] 解题报告
  • [2016.7 day.5] T2