一、Maven多模块
当我们一个项目有多个模块时,我们想使用一个命令即可对多个模块进行构建。Maven聚合就是为了满足该需求的。
假设我们有两个模块A和B。想使用一个命令就构建A和B两个模块,我们需要创建一个额外的名为C的模块,然后通过该模块构建整个项目的所有模块。作为一个模块,它必须有自己的POM文件,但作为一个聚合项目,它的POM又有其特殊地方。如:
<project 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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>C</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<modules>
<module>A</module>
<module>B</module>
</modules>
</project>
上述POM文件有两个特殊的地方:一是打包类型必须为pom,二是有modules元素。
通常为了方便用户构建项目,通常将聚合模块放在项目目录的最顶层,其他模块则作为聚合模块的子目录。如果使用平行目录,则聚合模块的POM要作出相应修改:
<modules>
<module>../A</module>
<module>../B</module>
</modules>
以此可看出,module中的内容是其他模块所在目录,而不是模块名称。
二、继承
1.父模块和子模块
一个项目的多个模块往往会有大量重复的配置。在面向对象编程中,程序员可通过继承一定程度上减少代码重复。Maven中也有类似的继承机制。
父模块的POM只有一个特殊的地方就是打包类型必须为pom。将各种子模块中共同配置放到该父模块中。然后由其他模块来继承:
<project 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">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>A</artifactId>
<groupId>com.test</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>./pom.xml</relativePath>
</parent>
<artifactId>A</artifactId>
</project>
上述POM文件中parent指明了父模块。relativePath元素指明了父模块pom.xml文件位置。默认值是目前模块的上层目录。子模块可以不指定groupId和artifactId。
2.可继承的POM元素
大多数元素都可被继承(是否意味着有些元素不能被继承??)
3.依赖管理
子模块会继承父模块的依赖,但是并不是所有子模块都需要父模块中的所有依赖,此时可使用 dependencyManagement 元素,在dependencyManagement中声明的依赖不会引入实际的依赖,不过它能够约束dependencies下的依赖使用。子模块只要指定依赖的groupId和artifactId即使显示指定该依赖。
4.插件管理
pluginManagement和dependencyManagement类似,用来管理插件。
三、聚合和继承的关系
两者的目的不同,聚合是为了方便构建,继承是为了消除重复配置。
对于聚合模块来说,它需要知道哪些被模块被聚合,但那些被聚合的模块不知道这个聚合模块的存在。
对于继承关系的父模块来说,它不知道有哪些子模块继承于它,但那些子模块才都必须知道自己的父模块。
现实中,通常将一个打包类型为pom的模块即作聚合模块,又作父模块。
四、反应堆
1.概述
所有反应堆是一个多模块项目中,所有模块组成的一个构建结构。根据各个模块之间的依赖关系,Maven会自动生成反应堆,要注意不能让两个模块互相依赖。
2.裁剪反应堆
一般来说,用户会选择构建整个项目或者模块某个模块,但有些时间,用户会想仅仅构建某些模块,而不所有模块。
-am --also-make 同时构建所列模块的依赖模块
-amd --also-make-dependents 同时构建依于所列模块的模块
-pl --projeccts <arg> 构建指定的模块,模块间用逗号分隔
-rf --resume-fron <arg> 从指定的模块开始构建,反应堆之前的模块不被构建。
分享到:
相关推荐
一个简单的maven聚合,继承示例。parent为父目录,account-email,account-persist为子项目,继承了parent的pom.xml文件
Maven聚合和继承 #资源达人分享计划 # 技术文档
该资源包含了一个maven聚合和继承的简单demo,可以参考博客http://blog.csdn.net/mockingbirds/article/details/47374127
通过Maven的聚合和继承特性创建复杂的多模块项目的简单演示,详细介绍见http://blog.csdn.net/autfish/article/details/51939515
这是一个maven依赖+继承+聚合的小例子,用来参考和学习maven
这里是maven继承与聚合代码。
maven 依赖,聚合,继承,插件运行,已经说明的简单小案例
编程思想的第十四章,代码,本人亲测通过后才上传的 这段代码是介绍组合和继承的联合
UML学习之依赖_关联_聚合_组合_继承
maven总结笔记-继承和聚合
程序设计实习 INFO130048 3-2.C++面向对象程序设计 —重载、继承、多态和聚合 复旦大学计算机科学与工程系 彭鑫
在javaweb高速发展的今天,我们软件设计人员往往会用很多种方式对软件划分模块,目的就是为了能有清晰的设计和低耦合性的,高重用性的软件。Maven有很好的依赖管理系统(Dependency Management System)和项目生命...
Maven的聚合与继承DEMO(以及前后端分离) 讲解文章:https://blog.csdn.net/Bof_jangle/article/details/106185213
几种类间关系:继承、实现、依赖、关联、聚合、组合。可做为开发设计时速查手册。
maven项目,主要是一些配置,如聚合和继承以及插件.私服等,项目按模块区分,多个子项目继承parent
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别 这是一堂关于UML基础知识的补习课;现在我们做项目时间都太紧了,基本上都没有做过真正的class级别的详细设计,更别提使用UML来实现规范 建模了...
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
利用maven构建项目,ssh简易框架,利用了聚合和继承
本文实例讲述了JavaScript继承与聚合。分享给大家供大家参考,具体如下: 一、继承 第一种方式:类与被继承类直接耦合度高 1. 首先,准备一个可以被继承的类(父类),例如 //创建一个人员类 function Person(name)...
maven高级(分模块设计、继承、聚合、私服)