Maven多模块之父子关系

Maven多模块项目,适用于一些比较大的项目,经过合理的模块拆分,实现代码的复用,便于维护和管理。尤为是一些开源框架,也是采用多模块的方式,提供插件集成,用户能够根据须要配置指定的模块。

Maven多模块(pom)

1.1 父模块建立

先建立个简单的空的Maven Project做为父项目框架

父模块步骤1

父模块步骤2

父模块步骤3

1.2 子模块建立

从新建立一个Maven Project做为子项目maven

子模块步骤1

子模块步骤2

子模块步骤3

1.3 父子模块(继承关系)

注意:此时父子模块为两个独立的项目。spa

父子项目目录结构

步骤1:子项目中加入<parent>节点,传入父项目完整坐标。插件

父项目坐标

步骤2:将子项目中的依赖都注释掉。code

注释子项目依赖

注意:此时子项目中的没有了Maven Dependencies。继承

步骤3:将子项目注释的依赖添加到父项目中。ci

父项目添加依赖

注意:此时子项目中的依赖又添加回来了。it

子项目的Maven Dependencies

这种直接在父工程中加入 <dependencies>的方式,让子工程能够直接复用依赖,可是缺点是 全部的子项目无条件继承父工程全部依赖,因此若是要在父工程中添加依赖只能针对很是通用的依赖。

在父项目中再添加一个依赖。io

父模块POM

子项目同时也继承了新添加的依赖。class

子项目依赖

那若是不想无条件继承父工程的全部依赖,而想让子项目自行选择须要的依赖又该如何作呢?

1.4 dependencyManagement

在父项目中用 <dependencies>节点包裹 <dependencies>节点,而且添加的是 完整的依赖坐标(gav)

dependencies

此时子项目中的Maven Dependencies又会消失,说明添加 <dependencies>节点后,它并不负责相关依赖的下载。

子项目加入相应一样依赖,注意不要加versionversion继承自父项目),须要什么样的依赖就声明什么。

子模块依赖

特别注意,若是父项目提供了 groupidversion,则删除子项目坐标中的 groupidversion,直接继承父项目相关坐标。

注释子项目节点

dependencyManagement的做用:依赖版本管理器

  1. 自己并不下载任何依赖,只是管理依赖的版本。依赖的下载依然须要单独的<dependencies>(不加dependencyManagement,额外写一个)去作
  2. 若是<dependencies>中的<dependency>没有声明版本号(version),maven会去寻找有无对应的dependencyManagement,当前工程没有就会向上找父工程。若是找到就以dependencyManagement中对应依赖声明的version为准,不然报错version is missing。
相关文章
相关标签/搜索