Maven 梳理 -聚合与继承
一、聚合
如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合
1.1、聚合配置代码
1 <modules>
2 <module>模块一</module>
3 <module>模块二</module>
4 <module>模块三</module>
5 </modules>
例如:对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合
1 <modules>
2 <module>../Hello</module>
3 <module>../HelloFriend</module>
4 <module>../MakeFriends</module>
5 </modules>
其中module的路径为相对路径。
二、继承
继承为了消除重复,我们把很多相同的配置提取出来,例如:grouptId,version等
2.1、继承配置代码
1 <parent>
2 <groupId>me.gacl.maven</groupId>
3 <artifactId>ParentProject</artifactId>
4 <version>0.0.1-SNAPSHOT</version>
5 <relativePath>../ParentProject/pom.xml</relativePath>
6 </parent>
2.2、继承代码中定义属性
继承代码过程中,可以定义属性,例如:
1 <properties>
2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3 <junit.version>4.9</junit.version>
4 <maven.version>0.0.1-SNAPSHOT</maven.version>
5 </properties>
访问属性的方式为${junit.version},例如:
1 <dependency>
2 <groupId>junit</groupId>
3 <artifactId>junit</artifactId>
4 <version>${junit.version}</version>
5 <scope>test</scope>
6 </dependency>
2.3、父模块用dependencyManagement进行管理
1 <dependencyManagement>
2 <dependencies>
3 <dependency>
4 <groupId>junit</groupId>
5 <artifactId>junit</artifactId>
6 <version>${junit.version}</version>
7 <scope>test</scope>
8 </dependency>
9 <dependency>
10 <groupId>cn.itcast.maven</groupId>
11 <artifactId>HelloFriend</artifactId>
12 <version>${maven.version}</version>
13 <type>jar</type>
14 <scope>compile</scope>
15 </dependency>
16 </dependencies>
17 </dependencyManagement>
这样的好处是子模块可以有选择行的继承,而不需要全部继承。
三、聚合与继承的关系
聚合主要为了快速构建项目,继承主要为了消除重复
四、聚合与继承实战演练
创建四个Maven项目,如下图所示:
这四个项目放在同一个目录下,方便后面进行聚合和继承
Parent项目是其它三个项目的父项目,主要是用来配置一些公共的配置,其它三个项目再通过继承的方式拥有Parent项目中的配置,首先配置Parent项目的pom.xml,添加对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合以及jar包依赖,pom.xml的配置信息如下:
Parent项目的pom.xml配置
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3 <modelVersion>4.0.0</modelVersion>
4
5 <groupId>me.gacl.maven</groupId>
6 <artifactId>Parent</artifactId>
7 <version>0.0.1-SNAPSHOT</version>
8 <packaging>pom</packaging>
9
10 <name>Parent</name>
11 <url>http://maven.apache.org</url>
12
13 <!-- 对项目的Hello、HelloFriend、MakeFriends这三个模块进行聚合 -->
14 <modules>
15 <module>../Hello</module>
16 <module>../HelloFriend</module>
17 <module>../MakeFriends</module>
18 </modules>
19
20 <!-- 定义属性 -->
21 <properties>
22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23 <junit.version>4.9</junit.version>
24 <maven.version>0.0.1-SNAPSHOT</maven.version>
25 </properties>
26
27 <!-- 用dependencyManagement进行jar包依赖管理 -->
28 <dependencyManagement>
29 <!-- 配置jar包依赖 -->
30 <dependencies>
31 <dependency>
32 <groupId>junit</groupId>
33 <artifactId>junit</artifactId>
34 <!-- 访问junit.version属性 -->
35 <version>${junit.version}</version>
36 <scope>test</scope>
37 </dependency>
38 <dependency>
39 <groupId>me.gacl.maven</groupId>
40 <artifactId>Hello</artifactId>
41 <!-- 访问maven.version属性 -->
42 <version>${maven.version}</version>
43 <scope>compile</scope>
44 </dependency>
45 <dependency>
46 <groupId>me.gacl.maven</groupId>
47 <artifactId>HelloFriend</artifactId>
48 <!-- 访问maven.version属性 -->
49 <version>${maven.version}</version>
50 </dependency>
51 </dependencies>
52 </dependencyManagement>
53 </project>
在Hello项目的pom.xml中继承Parent项目的pom.xml配置
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3
4 <modelVersion>4.0.0</modelVersion>
5 <artifactId>Hello</artifactId>
6
7 <!-- 继承Parent项目中的pom.xml配置 -->
8 <parent>
9 <groupId>me.gacl.maven</groupId>
10 <artifactId>Parent</artifactId>
11 <version>0.0.1-SNAPSHOT</version>
12 <!-- 使用相对路径 -->
13 <relativePath>../Parent/pom.xml</relativePath>
14 </parent>
15
16 <dependencies>
17 <dependency>
18 <groupId>junit</groupId>
19 <artifactId>junit</artifactId>
20 </dependency>
21 </dependencies>
22 </project>
在HelloFriend项目的pom.xml中继承Parent项目的pom.xml配置
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3 <modelVersion>4.0.0</modelVersion>
4 <artifactId>HelloFriend</artifactId>
5 <name>HelloFriend</name>
6
7 <!-- 继承Parent项目中的pom.xml配置 -->
8 <parent>
9 <groupId>me.gacl.maven</groupId>
10 <artifactId>Parent</artifactId>
11 <version>0.0.1-SNAPSHOT</version>
12 <relativePath>../Parent/pom.xml</relativePath>
13 </parent>
14 <dependencies>
15 <dependency>
16 <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
17 可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
18 <groupId>junit</groupId>
19 <artifactId>junit</artifactId>
20 </dependency>
21 <!-- HelloFriend项目中使用到了Hello项目中的类,因此需要添加对Hello.jar的依赖
22 Hello.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
23 因此这里也可以省略不写了
24 -->
25 <dependency>
26 <groupId>me.gacl.maven</groupId>
27 <artifactId>Hello</artifactId>
28 </dependency>
29 </dependencies>
30 </project>
在MakeFriends项目的pom.xml中继承Parent项目的pom.xml配置
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3 <modelVersion>4.0.0</modelVersion>
4 <artifactId>MakeFriends</artifactId>
5 <!-- 继承Parent项目中的pom.xml配置 -->
6 <parent>
7 <groupId>me.gacl.maven</groupId>
8 <artifactId>Parent</artifactId>
9 <version>0.0.1-SNAPSHOT</version>
10 <relativePath>../Parent/pom.xml</relativePath>
11 </parent>
12 <dependencies>
13 <dependency>
14 <!-- Parent项目的pom.xml文件配置中已经指明了要使用的Junit的版本号,因此在这里添加junit的依赖时,
15 可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
16 <groupId>junit</groupId>
17 <artifactId>junit</artifactId>
18 </dependency>
19 <dependency>
20 <!-- MakeFriends项目中使用到了HelloFriend项目中的类,因此需要添加对HelloFriend.jar的依赖
21 HelloFriend.jar的<version>和<scope>也已经在Parent项目的pom.xml文件配置中已经指明了
22 因此这里也可以省略不写了
23 -->
24 <groupId>me.gacl.maven</groupId>
25 <artifactId>HelloFriend</artifactId>
26 </dependency>
27 </dependencies>
28 </project>
以上的四个项目的pom.xml经过这样的配置之后,就完成了在Parent项目中聚合Hello、HelloFriend、MakeFriends这三个子项目(子模块),而Hello、HelloFriend、MakeFriends这三个子项目(子模块)也继承了Parent项目中的公共配置,这样就可以使用Maven一次性构建所有的项目了,如下图所示:
选中Parent项目的pom.xml文件→【Run As】→【Maven install】,这样Maven就会一次性同时构建Parent、Hello、HelloFriend、MakeFriends这四个项目,如下图所示:
转 https://www.cnblogs.com/xdp-gacl/p/4058008.html
Maven 梳理 -聚合与继承的更多相关文章
- 你分得清楚Maven的聚合和继承吗?
用了 Maven 好几年了,许多人还是只懂得简单的依赖坐标.对于 Maven 的聚合和继承还是一知半解,甚至很多人以为是同一个东西.但其实聚合是用于快速构建项目,是表示项目与子项目之间的关系.而继承则 ...
- Maven之 聚合与继承 详解
说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...
- maven的聚合与继承5
一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module&g ...
- maven的聚合和继承
Maven的聚合特性能够把项目的各个模块聚合在一起构建: 而Maven的继承特性则能帮组抽取各模块相同的依赖和插件等配置,在简化POM的同时,还能促进各个模块配置的一致性. 聚合:新建一个项目demo ...
- Maven入门-5.Maven的聚合和继承
1.Maven的聚合1.1 聚合的配置2.Maven的继承2.1 可被继承的POM元素2.2 POM中使用继承2.3 继承dependency 1.Maven的聚合 在Maven入门-4.Maven的 ...
- Maven学习总结(七):Maven的聚合和继承
一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module&g ...
- 【maven】---聚合和继承
前言 自从我知道写maven实战这本书的作者长得随心所欲后,我再拿起这本书真心的不想看前言了.下面分享一下maven中的所谓的聚合和继承. 内容 下文中的子本指的是:多个maven项目. 父本指的是: ...
- maven的聚合与继承
新建一个空的maven项目user-parent Pom.xml内容 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...
- Maven中聚合与继承
何为继承? --继承为了消除重复,我们把很多相同的配置提取出来 --例如:grouptId,version等 就像写java程序一样,对于有共性切重复的东西,就提取出来. 如有三个pom.xml配 ...
随机推荐
- Redis持久化的原理及优化
更多内容,欢迎关注微信公众号:全菜工程师小辉~ Redis提供了将数据定期自动持久化至硬盘的能力,包括RDB和AOF两种方案,两种方案分别有其长处和短板,可以配合起来同时运行,确保数据的稳定性. RD ...
- WebApi使用OAuth2认证
本篇文章实现了四种认证方式中的客户端模式和密码模式,未实现token持久化 未介绍OAuth2的相关概念,全部是干货,可自己在网上搜索OAuth2相关知识,在这不做过多阐述 一.引用OAuth2所需的 ...
- [python]多元赋值
1. 简介 将多个变量同时赋值的方法,称为多元赋值. 2. 示例一: x, y, z = 1, 2, 'a string' print x, y, z 运行结果: 1 2 a string
- CF #541 E. String Multiplication
题意: 给定一系列字符串,每次都是后一个字符串和前面的融合,这个融合操作就是原来的串分成独立的,然后把新串插入到这些空格中.问最后,最长的相同连续的长度. 思路: 这道题可以贪心的来,我们压缩状态,记 ...
- hdu 1176免费馅饼(记忆化搜索)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意不解释了 简单的记忆化搜索可以拿来练练手,注意要从pos = 5 开始搜索 #include ...
- Python学习之旅:使用Python实现Linux中的ls命令
一.写在前面 前几天在微信上看到这样一篇文章,链接为:https://mp.weixin.qq.com/s/rl6Sgv3uk_IpoFAx6cWa8w,在这篇文章中,有这样一段话,吸引了我的注意: ...
- Spring.Net是怎么在MVC中实现注入的(原理)
本文将介绍Spring.Net(不仅仅是Spring.Net,其实所有的IoC容器要向控制器中进行注入,原理都是差不多的)在MVC控制器中依赖注入的实现原理,本文并没有关于在MVC使用Spring怎么 ...
- [DP]最长递增子序列
#include <iostream> #include <limits.h> #include <vector> #include <algorithm&g ...
- Junit测试Controller(MockMVC使用),以及传输@RequestBody数据解决办法
转自:http://www.importnew.com/21153.html 一.单元测试的目的 简单来说就是在我们增加或者改动一些代码以后对所有逻辑的一个检测,尤其是在我们后期修改后(不论是增加新功 ...
- maven仓库的配置
今天接触到了maven的配置问题,特此来记录一下,也给我这样的小白一个参考. 目标:eclipse中配置指定的maven仓库. 说明: 使用过maven项目的话,会在你的C:\Users\lenovo ...