Maven百科 - 项目构建中的聚合与继承

在笔者细心研究之前,对这这两者的概念虽有所理解,但在实际操作过程中往往只是知其然不知其所以然,因为他们的配置方式都是在一个 主POM 或者说父POM里面做相关的配置,不知道的可能很容易混淆。

接下来笔者做个清晰的介绍吧,

聚合

所谓聚合,其实就是多模块构建。面对较为复杂的项目,通常都会被分为很多相互依赖的模块,而这些模块是独立构建,maven为了应付这种类似的需求,设置了聚合方式。

使用聚合方式,需要组建一个主模块或者说聚合模块,它是用来管理组织那些小模块。这个聚合模块本身是不用构建的,

它只需要定义一个看似较为特殊的POM即可。

我们以模块 account-email和account-persist为例,我们为此组建了一个名为account-aggregator的聚合模块。聚合模块的POM长这样:

其中需要注意的地方是packaing 被定义为POM,其次它额外声明了 modules 在这里面 添加了各个module的名字。

当然了,这只是建立在 主POM文件和 各模块是父子层级关系的时候,当然也可以是平行关系。见下图

左图是父子关系的层级图,右图是平行关系的层级图。如果说只用层级关系的时候主POM中的module需要做相应的变化、

还有一点需要注意的是,如果在account-persist的模块中,对account-email有依赖的话,需要在 dependences中声明account-email的GAV(GroupId,artifactId,version).

继承

继承就是在从主pom那里继承许多重用的配置,可以省去许多代码量了。使用继承方式的话,也是需要一个主POM,其packaging定义为pom。和聚合模块类似,它本身也不用构建,所以没有src target等目录的。

此外还需要在子模块中 定义父模块的相关信息。

在parent元素中声明的是父pom的GAV和父POM的相对路劲。 然后再声明自己的GAV。 上图的group和version省略了,原因是从主POM那里继承了。

除了groupId和Version 还有哪些元素可以被继承的呢?

可继承的POM元素

groupId
项目Id

version 项目版本
description 项目描述
organization 项目组织信息
inceptionYear 项目创始年份
url 项目url地址
developers 项目开发者
contributors 项目贡献者
distributionManagement 项目部署配置
issueManagement 项目缺陷跟踪系统信息
ciManagement 项目的持续集成系统信息
scm 项目的版本控制系统信息
mailingList 项目的邮件列表信息
properties 自定义的maven属性
dependencies 项目的依赖配置
dependenciesManagement 项目的依赖配置管理
repositories 项目仓库配置
build 项目的构建配置,包括源码,输出目录,插件配置等
reporting 报告配置
时间: 2024-08-29 11:10:56

Maven百科 - 项目构建中的聚合与继承的相关文章

Maven百科 - 项目构建中的生命周期

Maven 中的三套生命周期 在maven中,其实是有三套相互独立的生命周期(Lifecycle),而不是我们以为的一套生命周期,准确地来说,在maven的世界,它有自己的一套生命周期管理的技术体系,在这套体系中,maven为我们定义了三套互相不影响的生命周期.它们分别是clean,default和site. 其中clean 和default最为常用了. 此外呢,每套生命周期 都有若干个生命周期阶段(phase).其中每套生命周期中的阶段都依赖于前一个阶段,以 clean 生命周期为例. cle

Maven百科 - 项目构建中的插件与目标

插件与目标 在讲述插件与生命周期关系之前,要明确一个概念,那就是插件目标.Maven它只抽象或者定义了生命周期与对应的任务, 真正去实现这些任务的是各个插件,所以maven的发布包只有3M左右的大小,当需要去做特定任务的时候,才会去下载插件(.jar). 从代码优化角度或者对于插件本身,考虑到代码的重用性,各任务之间想必一定会有可重用部分的代码,或者说,一部分可重用的代码,也能做很多事情. 所以一个插件,它并不是简单的完成一个任务,而是包含了很多任务,而这些插件可做的事情,就是插件目标. 以ma

用 Maven 做项目构建

简介 本文将介绍基于 Apache Maven 3 的项目构建的基本概念和方法.Maven 是一套标准的项目构建和管理工具,使用统一规范的脚本进行项目构建,简单易用,摒弃了 Ant 中繁琐的构建元素,并具有较高的可重用性.读完本文,你将了解 Maven 的基本概念和使用它进行项目构建的基本方法. 什么是 Maven Maven 是 Apache 组织下的一个跨平台的项目管理工具,它主要用来帮助实现项目的构建.测试.打包和部署.Maven 提供了标准的软件生命周期模型和构建模型,通过配置就能对项目

Maven:项目构建工具

项目构建工具 —— Maven Maven简介 Maven官网: http://maven.apache.org/ 百度百科:关键词: 项目对象模型(Project Object Model),项目管理工具,合理叙述项目间的依赖关系 作用 1)      管理jar 2)      将项目拆分若干个模块,多个模块组合成大项目 3)      热部署,热编译 仓库概念 依赖特性 Maven安装与配置 Maven下载地址:http://maven.apache.org/download.cgi 步骤

Maven Web项目构建

1.环境说明 系统环境:win7 Eclipse: Eclipse Java EE IDE for Web Developers. Version: Mars Release (4.5.0),此版本是Jave EE IDE最新的版本,使用最新版本的好处是,集成了很多插件,而且有很多特色设置.如本文的Eclipse的主题换成了dark主题. Maven : Maven 3.3.3,Maven的安装,设置环境变量,以及eclipse Maven插件的安装请参考Maven 安装 2.项目构建步骤 (1

Maven核心概念之依赖,聚合与继承

宏观图 一.依赖 我们项目中依赖的jar包可以通过依赖的方式(dependencies元素下添加dependency子元素)引入. <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> 1.依赖范围 通过控制依赖的范围,可以指定该依赖在什么阶段有效. &

maven_项目的依赖、聚合、继承

一.假设目前有三个maven项目,分别是project.A.project.B.project.C 要求B依赖A.C依赖B但不依赖C 1.B添加对A的依赖 1 2 3 4 5 <dependency>             <groupId>com.project</groupId>             <artifactId>project.A</artifactId>             <version>0.0.1-S

使用maven替换项目依赖中的字节码

问题描述 我们偶尔会发现一些开源项目的问题,或者出于其他原因,想在某个dependency的代码中加几行或者删除几行来达到目的. 我这里遇到一个dubbo 2.7.3和open feign冲突的问题 参见 Issue https://github.com/apache/dubbo/issues/3990. 这里不能等官方修复这个问题并发布更新时,怎么让项目正确的跑起来呢? 问题思路 第一种 字节码替换技术?使用bytebuddy,javassist, asm? 这些技术的局限性,就是JVM本身不

《Maven实战》笔记-5-pom聚合和继承

一.聚合 假设有两个模块:account-email和account-persist: 能够使用一条命令就能构建上述两个模块,需要创建一个额外的模块:account-aggregator: 通过account-aggregator构建整个项目的所有模块,而该模块本身也是Maven项目,有自己的Pom文件: 注意聚合模块account-aggregator打包方式packaging的值必须为pom,如下: 注意,聚合模块与其他模块的目录结构一般是父子关系,如上述pom所示.不过也不是必须的,这是要