Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

时间:2022-12-29 15:18:35

一、概念简介

1、什么是模块聚合?

        当一个项目慢慢变大时,就需要对项目的功能进行拆分,分成独立的几个模块,这个时候就需要用到模块的聚合功能,将独立的几个模块聚合到一个项目中。聚合的主要作用是将解耦的模块进行工业化组装,形成分布式系统应用。

在父模块中声明该项目的所有模块,如下:

<packaging>pom</packaging><!-- 打包类型为pom -->
<modules> 
  <module>demo-common</module><!-- 公共组件 --> 
  <module>demo-cms</module><!-- 后台管理系统 --> 
  <module>demo-sso</module><!-- 单点登录系统 --> 
  <!-- ...... --><!-- 其他模块 -->
</modules>
 
 

在子模块中声明该模块所属的父项目,如下:

<packaging>jar</packaging><!-- 打包方式jar包或者war包,如果不声明默认为jar包,当然也可以为pom,这意味着此模块下面还有子模块 -->
<parent> 
  <groupId>com.mengfei</groupId><!-- 命名规范:com后面公司名或缩写 --> 
  <artifactId>demo-parent</artifactId><!-- 命名规范:项目名-模块名 --> 
  <version>0.0.1-SNAPSHOT</version>
</parent>
 
 
 
 

2、什么是模块继承?

        当系统越来越大,模块越来越多时,配置文件也越来越多,分布在各个模块的配置文件内容如果要修改时就很麻烦,不利于维护,这个时候就需要用到模块的继承功能,统一在父模块中进行通用配置,然后在子模块中继承父模块的配置。继承的主要作用就是方便维护配置文件,同时实现代码重用。

在父项目中统一定义依赖的jar包,如下:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>4.12</junit.version><!-- 在属性设置中统一定义依赖jar包版本号 -->
</properties>
<dependencyManagement><!-- 在此标签管理下的依赖配置可以由子模块继承 -->
  	<dependencies>
  		<dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
	      <version>${junit.version}</version>
    	</dependency>
  	</dependencies>
</dependencyManagement>
在子模块中继承父模块的配置,如下:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
    <!-- 继承依赖配置时就不需要再添加版本号,实现父项目的统一管理 -->
</dependencies>

3、什么是依赖传递?

        当我们项目中的某个模块需要用到另外一个模块时,我们称之为该模块依赖另一个模块,比如dao层访问数据库时需要用到model层,那就是dao层依赖model层。然后如果service层同时需要用到dao层和model层时,service层只需要依赖dao层即可,因为dao层已经依赖了model层,依赖从dao层传递到了service层,所以service层也依赖了model层,这就是依赖传递的特性。如下图:
Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

二、项目演示

1、创建父模块

① 选择maven项目原型(File → New → Project → Next)

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

② 填写父模块信息

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

③ 查看创建的项目

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

不知道怎么创建逻辑工作空间的可以参考: Eclipse使用(一)—— 下载、安装Eclipse并进行编码配置和一些常用的使用配置

2、创建子模块demo-common

① 开始创建子模块(左键点击父模块,右键点击选择New → Project)

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

② 填写父子模块名称

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

③ 选择maven项目原型

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

④ 项目创建完成

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

3、同样的步骤选择webapp原型创建子模块demo-sso

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

4、同样的步骤选择site-simple原型再创建一个子模块demo-cms

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

5、查看父项目的pom文件,聚合了三个模块

<modules>
    <module>demo-common</module>
    <module>demo-sso</module>
    <module>demo-cms</module>
  </modules>

6、向父项目的pom中添加依赖管理

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>4.12</junit.version>
    <servlet-api.version>4.0.0</servlet-api.version>
  </properties>
  <dependencyManagement>
  	<dependencies>
  		<dependency>
		    <groupId>junit</groupId>
		    <artifactId>junit</artifactId>
		    <version>${junit.version}</version>
    	</dependency>
	    <dependency>
	  		<groupId>javax.servlet</groupId>
	  		<artifactId>javax.servlet-api</artifactId>
	  		<version>${servlet-api.version}</version>
	  	</dependency>
  	</dependencies>
  </dependencyManagement>

7、修改demo-sso中的pom文件内容,继承父项目的pom依赖

demo-sso因为缺少servlet容器应该一直报错,修改完之后更新一下demo-sso应该就不会报错了,不报错了说明继承依赖成功。
<dependencies>
    <dependency>
	   <groupId>javax.servlet</groupId>
	   <artifactId>javax.servlet-api</artifactId>
    </dependency>
</dependencies>

8、修改demo-common中的pom文件内容,继承父项目的pom依赖

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <!-- <scope>test</scope> -->
    </dependency>
</dependencies>

9、在demo-common项目的App类中编写一个测试方式,调用Test注解

测试方法成功执行,说明继承依赖成功

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

10、按照上面的步骤在demo-cms下面创建五个子模块

cms-model:cms系统用到的实体模型模块

cms-dao:cms系统的数据访问模块

cms-service:cms系统的业务服务模块

cms-controller:cms系统的控制转发模块

cms-web:cms系统的静态资源和视图模块

下面是它们的依赖关系图:

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系

11、进行依赖传递测试

① 修改cms-dao的pom文件如下内容(添加junit依赖,仅仅为了测试,开发中不会这么做)

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <!-- <scope>test</scope> -->
    </dependency>
  </dependencies>

② 修改cms-service的pom文件如下内容(添加cms-dao的依赖)

<dependencies>
    <dependency>
      <groupId>com.mengfei</groupId>
  	  <artifactId>cms-dao</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>

③ 修改cms-controller的pom文件如下内容(添加cms-service的依赖)

<dependencies>
    <dependency>
      <groupId>com.mengfei</groupId>
  	  <artifactId>cms-service</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>

④ 在cms-controller中的App类中写一个测试方法,调用junit的注解实现,如果方法正常执行,说明依赖传递成功

Eclipse使用(十二)—— 创建Maven多模块(父子)项目演示Maven的聚合和继承以及模块之间的依赖关系