Maven学习总结(七):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这四个项目,如下图所示:
Maven学习总结(七):Maven的聚合和继承的更多相关文章
- Maven学习总结(5)——聚合与继承
Maven学习总结(五)--聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module> ...
- (转)Maven学习总结(七)——eclipse中使用Maven创建Web项目
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(七)——eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -&g ...
- 【转】Maven实战(九)---模块聚合和继承
原博文出自于:http://blog.csdn.net/liutengteng130/article/details/47001831 感谢! 类之间有聚合和继承关系,Maven也具备这样的设计原 ...
- (转)Maven学习总结(六)——Maven与Eclipse整合
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(六)——Maven与Eclipse整合 一.安装Maven插件 下载下来的maven插件如下图所示:,插件存放的路径是:E:/MavenP ...
- (转)Maven学习总结(四)——Maven核心概念
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...
- (转)Maven学习总结(二)——Maven项目构建过程练习
孤傲苍狼 只为成功找方法,不为失败找借口! Maven学习总结(二)——Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建项 ...
- Maven实战(九)---模块聚合和继承
类之间有聚合和继承关系,Maven也具备这种设计原则. 那么Maven的pom是怎样进行聚合与继承的呢? 一.什么是聚合?为什么要用聚合? 上一篇博客介绍了模块化的基本知识. 有了模块化,那么我们项目 ...
- MAVEN学习笔记之Maven插件的应用(4)
MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- Maven学习(七)仓库
* Maven仓库 在项目开发中, 项目目录下往往会有一个lib目录,用来存放第三方依赖jar文件, 如spring log4j jar等文件, Maven仓库就是放置JAR文件(WAR,ZIP,P ...
随机推荐
- elasticsearch 基础笔记
基础: 1.查看 所有节点,及版本 http://192.168.18.7:9200/_nodes/_all/version?pretty=true
- 总纲篇:产品结构设计指导VII(本博客指引章节)
本章目的:搭建自己的产品结构设计知识体系与框架,从零开始设计一个完整产品. 需知远途即捷径! //作者的结构设计体系尚在搭建中,所有的文章都会定期进行一定编排修改 目录: 0)自序 1.基础篇 1)时 ...
- C. Edgy Trees Codeforces Round #548 (Div. 2) 【连通块】
一.题面 here 二.分析 这题刚开始没读懂题意,后来明白了,原来就是一个数连通块里点数的问题.首先在建图的时候,只考虑红色路径上的点.为什么呢,因为为了不走红色的快,那么我们可以反着想只走红色的路 ...
- 在国内运行Flutter配置的正确姿势--如出现Oops; flutter has exited unexpectedly.
如果根据flutter的官网教程,在运行flutter doctor时无法下载依赖,请根据以下步骤 export PUB_HOSTED_URL=https://pub.flutter-io.cn ex ...
- [Xamarin] 透過 IsolatedStorageFile儲存資料(转帖)
開發手機App通常都會遇到想要儲存資料的,舉個例來說,像是 (圖片來源:http://docs.xamarin.com/guides/android/application_fundamentals/ ...
- Compile android source and kernel for emulator in Debian
1.download the android source code Reference from http://source.android.com/source/downloading.html ...
- linux mint 19安装 kvm 软件包
1 我的处理器是2700x 首先安装cpu检测 sudo apt-get install cpu-checker 2 查看cpu内核 egrep -c '(vmx|svm)' /proc/cpuinf ...
- Redis之hiredis API (String)
String // // Created by zhangrongxiang on 2018/3/7 13:48 // File string2 // #include <hiredis/hir ...
- C#控制台程序,运行完窗口不退出的方法
.... static void Main(string[] args){ Console.WriteLine("运行完后不退出窗口"); Console.ReadKey();// ...
- java的finally简单理解
1. 大家都知道, 普通的try, catch, finally格式: try{ //有可能会抛出异常的代码 }catch{ //抛出异常时处理的代码 }finally{ //无条件执行的代码,就不管 ...