maven聚合和继承(一次操作多个项目)

来源:互联网 发布:mp288清零软件怎么样 编辑:程序博客网 时间:2024/06/05 15:24

1、聚合

假设有项目A和项目B,我们想一次性构建两个项目,而不是到两个模块的目录下分别执行mvn命令。maven聚合解决了该问题。
这时候我们要创建另外一个项目ALL,然后通过该模块构建整个项目的所有模块。ALL作为一个maven项目,必须拥有自己的pom文件。
eclipse创建父项目时要选择site-simple:
这里写图片描述
删除出pom.xml的其他文件,其中JRE System Library是不能直接删除的,需要选择中,并单击右键Bulid Path–>Remove from bilud path即可移除。
这里写图片描述
ALL的配置 如下:

  <groupId>my</groupId>  <artifactId>ALL</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>pom</packaging>  <modules>    <module>../A</module>    <module>../B</module>  </modules>

ALL中的packagin配置必须为pom。一般情况下,为了方便快速定位内容,模块所处的目录名称应该与其artifactId一致。
在父项目中运行clean package命令,就会分别在A/B下各生成对应的包。

2、继承

如果子项目A,B需要继承项目ALL中的POM配置,那么就需要使用到继承。在子项目中添加配置:

  <parent>    <groupId>my</groupId>    <artifactId>ALL</artifactId>    <version>0.0.1-SNAPSHOT</version>  </parent>

parent元素中的属性对应的都是父项目中的内容。在parent元素中还有一个属性relativePath,maven会通过这个路径去查找父项目的pom.xml,如果找不到会从本地仓库中查找。relativePath的默认值是../pom.xml,也就是默认父POM在上一层目录下。
可继承的pom元素如下:
groupId:项目组ID
version:项目版本
description:项目描述
organization:项目的组织信息
inceptionYear:项目的创建年份
url:项目的url地址
developers:项目的开发者信息
contributors:项目贡献值信息
distributionManagement:项目的部署配置
issueManagement:项目的缺陷跟踪系统信息
ciManagement:项目持续集成系统信息
scm:项目的版本控制系统消息
mailingLists:项目的邮件列表信息
properties:自定义的maven属性
dependencies:项目的依赖配置
dependencyManagement:项目的依赖管理配置
repositories:项目的仓库配置
build:项目的源码目录配置,输出目录配置,插件配置,插件管理配置等
reporting:项目的报告输出目录配置等

3、继承依赖管理

子项目都会继承父项目的依赖关系,如果子项目不需要父项目的依赖关系,maven提供的dependencyManagement元素能让子模块继承到父模块的依赖配置,有能保证子模块的灵活性。dependencyManagement元素下的依赖声明不会引入实际的依赖,能约束dependencies下的依赖使用。父项目中使用该元素声明的依赖既不会给父项目引入依赖也不会给子项目引入依赖,但是该配置会被继承。如果子项目中不声明经过父项目dependencyManagement修饰的依赖,那么子项目就不会引入该依赖。
子项目如果要声明父项目中经过dependencyManagement修饰的依赖,只需要定义groupId和artifactId即可。
假设ALL包含如下配置:

<dependencyManagement>    <dependency>        <groupId>org.a</groupId>        <artifactId>aaa</artifactId>        <version>1.0</version>    </dependency>    <dependency>        <groupId>org.b</groupId>        <artifactId>bbb</artifactId>        <version>1.0</version>    </dependency></dependencyManagement>

如果子项目要引入ALL中的依赖配置如下:

<dependency>    <groupId>org.a</groupId>    <artifactId>aaa</artifactId></dependency>

继承父项目的插件,如果父项目的插件包含在pluginManagement元素中,子项目需要引入该插件只需要配置groupId和artifactId。

1 0