当前位置: 移动技术网 > IT编程>开发语言>Java > 荐 Maven 多模块管理/继承/聚合(二)

荐 Maven 多模块管理/继承/聚合(二)

2020年07月17日  | 移动技术网IT编程  | 我要评论

Maven的多模块管理

在实际开发的项目中,一个完整的项目由一个一个的模块(model)组成,今后的实际开发,你也仅仅是负责其中一个模块的一个小环节;同样在MVC架构中(MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)),单一的一个Maven模块已经不能满足我们的需求,我们需要有一个父模块开管理我们的其它子模块。。。Maven 自动化工具(一)

关于Maven的多模块创建模式可以大体分成三种

  • 包含关系——父工程包含子模块
  • 平行关系——父工程与子模块平行

接下来我用IDEA演示一下这三种方式的构建

  1. 创建一个A模块作为父工程
    在这里插入图片描述
    这里选择java或javaweb都可以,因为我们仅仅把它作为父工程,只保留
    在这里插入图片描述
    Next,Finish然后等待Maven构建即可

  2. Maven构建好后,在pom文件中删除其它多余内容,保留坐标即可

作为父工程的必须删除src目录
package标签的文内容必须设置为pom

在这里插入图片描述
包含关系

创建子模块
在这里插入图片描述
Next,Finish然后等待Maven构建即可(C模块同理)
在这里插入图片描述
至此,A工程诞生了B、C两个子模块

平行关系

创建子模块
在这里插入图片描述
Next,Finish然后等待Maven构建即可(C模块同理)
在这里插入图片描述
至此,A工程诞生了D、E两个子模块

父子关系即可满足项目需求,实际可以子、父、爷、祖…无限套娃

Maven 聚合与继承

聚合在java 中是在A对象功能完整需要 另外B对象来实现,所以A类中有着B类对象的引用,但是A对象的生命周期结束,B对象依然可以存在,简而言之就两个对象的生命周期不同。当然在maven中,聚合又是为了解决另外一个问题而存在的一种机制。通常我们的项目都是都模块的,而每个模块又是一个 maven项目,所以每次开发完了编译都需要一个一个模块的去执行,这就违背了maven的自动化理念。

此时此刻我们使用maven构建项目时,B、C、D、E聚合在一起了

继承聚合有相似的地方,继承的特性是指建立一个父模块,我们项目中的多个模块都做为该模块的子模块,将各个子模块相同的依赖和插件配置提取出来,从而简化配置文件,
在这里插入图片描述
此时我们在父工程A中的pom文件添加了三个依赖,就像项目经理要求我们必须用这个依赖的版本
在这里插入图片描述
但此时B、C、D、E四个子模块并没有得到来自父B的依赖,那是因为现在知识单方面A认了B、C、D、E,可他们四个还没认A为父,所以继承关系并不能产生
在这里插入图片描述
在这里插入图片描述
此时B、C、D、E与A有了继承关系,仅仅修改A中的pom文件,即可改动全部

补充
但实际开发中并不是这样的,A中的pom文件规定了本次项目所有依赖的版本号,到有些子模块并不需要全部继承,所以我们就需要在A中的pom文件添加<dependencyManagement>标签来管理依赖,规定好所需版本号,子模块根据自己的需求在自己的pom文件中拿取(仅添加groupId及version) 或者额外添加(坐标GAV)

  <!-- 父管理依赖的版本号 -->
  <properties>
    <!-- 自定义标签名 -->
    <!--
      通常管理依赖版本号的标签名称由 = 项目名称 + 字段version
    -->
    <junit-version>4.10</junit-version>
    <mysql-connector-java-version>5.1.9</mysql-connector-java-version>
    <servlet-api>2.5</servlet-api>
  </properties>

  <!-- 父工程要加强管理子模块的所有依赖 -->
  <dependencyManagement>

    <!-- 父工程添加的依赖,所有子模块会无条件继承 -->
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit-version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql-connector-java-version}</version>
      </dependency>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>${servlet-api}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

本文地址:https://blog.csdn.net/weixin_46718393/article/details/107377087

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网