1.聚合

一次构建多个项目模块。

2.继承

为了消除重复,把很多相同的配置提取出来,例如groupid和version;

2.1 Maven中可以继承的POM元素

groupId :项目组 ID ,项目坐标的核心元素;
version :项目版本,项目坐标的核心元素;
description :项目的描述信息;
organization :项目的组织信息;
inceptionYear :项目的创始年份;
url :项目的 url 地址
develoers :项目的开发者信息;
contributors :项目的贡献者信息;
distributionManagerment :项目的部署信息;
issueManagement :缺陷跟踪系统信息;
ciManagement :项目的持续继承信息;
scm :项目的版本控制信息;
mailingListserv :项目的邮件列表信息;
properties :自定义的 Maven 属性;
dependencies :项目的依赖配置;
dependencyManagement :醒目的依赖管理配置;
repositories :项目的仓库配置;
build :包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等;
reporting :包括项目的报告输出目录配置、报告插件配置等。

3.示例

3.1创建4个Maven项目,放在相同的目录下,其中hello_parent为父项目(聚合模块),hello_1/hello_2/hello_3为子项目(被聚合的模块);hello_parent的POM既是聚合POM,又是父POM这么做主要是为了方便。

3.1.1 hello_parent项目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">
<!-- 当前pom的版本号 -->
<modelVersion>4.0.0</modelVersion>
<!-- groupId: 当前jar所属的命名空间 -->
<groupId>cn.test.maven</groupId>
<!-- 当前项目模块名称 -->
<artifactId>parent</artifactId>
<!-- 当前项目的版本, SNAPSHOT镜像版 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 聚合、父继承的packaging必须是pom -->
<packaging>pom</packaging> <!-- name提供一个相对容易读的名字,合理配name字段,会让Mavne的构建输出更清晰 -->
<name>Parent</name>
<url>http://maven.apache.org</url> <!-- 定义要聚合的模块 -->
<modules>
<!-- 每个module的值都是当前pom的相对路径 -->
<module>../hello_ch1</module>
<module>../hello_ch2</module>
<module>../hello_ch3</module>
</modules>
<!-- 定义属性 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.9</junit.version>
<maven.version>0.0.1-SNAPSHOT</maven.version>
</properties> <!-- 用dependencyManagement进行jar包依赖管理 -->
<dependencyManagement>
<!-- 配置jar包依赖 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 访问junit.version属性 -->
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.test.maven</groupId>
<artifactId>hello_ch1</artifactId>
<!-- 访问maven.version属性 -->
<version>${maven.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cn.test.maven</groupId>
<artifactId>hello_ch2</artifactId>
<!-- 访问maven.version属性 -->
<version>${maven.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
/*

继承的优点:在父pom中定义共同的依赖关系,统一管理项目,确保应用的各个子模块的依赖和版本一致。同时可以避免在每个子模块中都声明一个版本号,这样在升级或者切换到另一个版本时,只需要在父pom里更新,不需要到每一个子模块里修改;如果某个子模块需要另外一个版本时,只需要在其dependencies中声明另一个版本即可。子项目就会使用子pom中声明的版本号,覆盖父pom声明的版本。

*/
/*

dependencies
所有声明在dependencies里的依赖都会自动引入,并默认被所有的子pom继承。 dependencyManagement
只是声明依赖,并不实际引入,因此子pom需要显示的声明需要用的依赖。如果不在子pom中声明依赖,是不会从父pom中继承下来的;只有在子pom中写了该依赖项,并且没有指定具体版本,才会从父pom中继承该项,并且version和scope都读取自父pom;另外如果子pom中指定了版本号,那么会使用子pom中指定的版本。 */

3.1.2 子项目1 POM(hello_ch1)

<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>
<artifactId>hello_ch1</artifactId> <!-- 继承parent项目中的pom.xml配置 -->
<parent>
<groupId>cn.test.maven</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 相对路径 -->
<relativePath>../hello_parent/pom.xml</relativePath>
</parent> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
/*
parent标签 artifactId
父pom的artifact标识符 groupId
父pom的group标识符 version
父pom的版本 relativePath 父项目的pom.xml文件的相对路径。默认值为../pom.xml。maven首先从当前构建项目开始查找父项目的pom文件,然后从本地仓库,最有从远程仓库。RelativePath允许你选择一个不同的位置。 */

3.1.3 子项目2 POM(hello_ch2)

<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>
<artifactId>hello_ch2</artifactId>
<name>hello_ch2</name>
<!-- 继承parent项目中的pom.xml配置 -->
<parent>
<groupId>cn.test.maven</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../hello_parent/pom.xml</relativePath>
</parent> <dependencies>
<dependency>
<groupId>junit</groupId>
<!-- hello_ch2使用junit 4.8;不继承父pom中的 junit 4.9 -->
<version>4.8</version>
<artifactId>junit</artifactId>
</dependency> <dependency>
<groupId>cn.test.maven</groupId>
<artifactId>hello_ch1</artifactId>
</dependency>
</dependencies>
</project>

3.1.4 子项目3 POM(hello_ch3)

<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>
<artifactId>Hello</artifactId> <parent>
<groupId>cn.test.maven</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../hello_parent/pom.xml</relativePath>
</parent> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency> <dependency>
<groupId>cn.test.maven</groupId>
<artifactId>hello_ch2</artifactId>
</dependency>
</dependencies>
</project>

4.在parent项目中构建:

Maven学习小结(四 聚合与继承)的更多相关文章

  1. maven学习笔记四(聚合和继承)

    聚合 现在假如,我创建了3个maven项目, user-core.2.user-log,3.user-service 这个时候,假如我们要打包这些项目,要一个一个来,会很麻烦.那么我们有没有更好的办法 ...

  2. (转)Maven学习总结(五)——聚合与继承

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(五)——聚合与继承 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <mod ...

  3. Maven学习总结(五)——聚合与继承

    一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 <modules> <module>模块一</module> & ...

  4. 转】Maven学习总结(五)——聚合与继承

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4058008.html 感谢! 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1. ...

  5. (转)Maven学习总结(四)——Maven核心概念

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...

  6. Maven详解之聚合与继承

    说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...

  7. Maven详解 之 聚合与继承

    说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高, ...

  8. Maven学习归纳(五)——继承与聚合实例讲解

    一.Maven的继承 1.1 什么是继承? 继承:父工程拆分出很多子工程,可以通过父工程,统一管理依赖的版本 1.2 为什么要使用继承呢? 在A.jar 依赖着——>B.jar依赖着——> ...

  9. (5)Maven快速入门_5maven聚合与继承_scope依赖范围

    多个maven项目实现统一管理, maven 插件jar继承自父的maven项目.对maven中jar的版本进行管理. 1.创建一个项目来管理多个maven项目 new ----maven Proje ...

随机推荐

  1. 数往知来C#面向对象准备〈二〉

    面向对象(OOP→Object-Oriented Programming) 1.什么是面向对象? 一种分析问题的方式. 2.面向对象三大特征: 封装(隐蔽代码实现/复用/修改方便).继承.多态. 3. ...

  2. mvn deploy 报错:Return code is: 400, ReasonPhrase: Bad Request. ->

    mvn deploy 报错:Return code is: 400, ReasonPhrase: Bad Request. -> TEST通过没有报错,但是最终部署到Nexus中时出现错误. 后 ...

  3. HDU ACM Eight

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 解题背景: 看到八数码问题,没有任何的想法,偶然在翻看以前做的题的时候发现解决过类似的一道题,不 ...

  4. sqlserver 删掉日志文件ldf以后 救命语句

    sqlserver 删掉日志文件ldf以后  救命步骤: 先新建一个新数据库, 删掉新建的 .mdb 用想要还原的mdb覆盖 执行下面的语句 ALTER DATABASE 'DB_Core' SET ...

  5. 第二百七十二、三天 how can I 坚持

    昨天加班回来都很晚了,也忘了些日志了.其实感觉加班也没什么啊,一个团队在一块说说闹闹,愉快的完成工作挺好. 今天是2015年的最后一天,2015的愿望啊,只怪自己太怂了.不怂会是什么结果. 其实更应该 ...

  6. 递归算法,JavaScript实现

    我们先来看一下定义.递归算法,是将问题转化为规模缩小的同类问题的子问题,每一个子问题都用一个同样的算法去解决.一般来说,一个递归算法就是函数调用自身去解决它的子问题. 递归算法的特点: 在函数过程中调 ...

  7. Gym 100507H Pair: normal and paranormal (贪心)

    Pair: normal and paranormal 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/H Description ...

  8. CodeForces 489A SwapSort (选择排序法)

    SwapSort 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/A Description In this problem yo ...

  9. 典型LoadRunner脚本

    Action() { int rc = 0; int cmp_result = 0; char over_msg[] = "\"真遗憾,好心塞,手慢了一下,已经被人抢走了,再去看看 ...

  10. UVaLive 7374 Racing Gems (DP,LIS)

    题意:以辆赛车可以从x轴上任意点出发,他的水平速度允许他向每向上移动v个单位,就能向左或向右移动v/r个单位(也就是它的辐射范围是个等腰三角形) 现在赛车从x轴出发,问它在到达终点前能吃到的最多钻石. ...