聚合工程:指的是基于Maven
工程的模块化开发。它的优势是:
- 目录清晰,方便管理
- 支持分开开发(团队)
- 便捷且统一的依赖版本管理
在实际中我是这样去理解的(可能有误,但我觉得思想是开放的,怎么样理解有道理就行)。
项目老大发了一个任务,他先做了如下几件事:
- 事先搭好了工程的结构并且指定了
pom
文件中的依赖管理 - 给每个人分配了底层的任务,例如:实体类、Mapper+测试、Service层、Controller...
- 由于每个人的工期是不同的,可能同时负责了多项项目,所以团队合作很可能是以一个阶梯执行的。
OK,接下去我们针对前面两件事情,来学习一下聚合工程。
步骤
新建工程
新建一个空的工程,指定使用maven
作为包管理工具。
进入工程后,删除src
目录,因为这是一个父工程,src
是作为源代码目录,这里父工程并不做代码编辑,所以直接删除。
编辑pom文件 - 统一依赖管理
主流是使用SpringBoot
开发,所以可以指定一个父目录的父亲:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.6.RELEASE</version>
</parent>
在properties
标签中指定一下我们这个工程需要依赖的版本号,这个主要也是参考spring-boot-starter-parent
的写法形式去做的,有兴趣的可以点开看看spring-boot-dependencies
。
这里为了后续介绍一个整合工程,先引入一些基础的包,并且指定他们的版本号:
- mybatis-plus:数据持久层框架
- knife4j:接口文档框架
- jwt:jwt安全认证
- fastjson:json格式转换
<properties>
<java.version>1.8</java.version>
<mybatis-plus.version>3.4.1</mybatis-plus.version>
<mysql.version>8.0.30</mysql.version>
<knife4j.version>3.0.3</knife4j.version>
<jwt.version>0.9.1</jwt.version>
<fastjson.version>2.0.21</fastjson.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
这样做的目的是,先确定这个工程依赖的包是不存在冲突的。
这样做还不够,这样做只是指定了版本号,就和定义了变量一样,为了后续的工程引入该依赖配置时不再放入版本号,我们还需要编写dependencyManagement
标签。
<dependencyManagement>
<dependencies>
<!--mybatis-plus 持久层-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--knife4j-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!--jjwt-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
这样就已经实现了后续子模块导入该依赖时不再需要指定版本号。
新建模块 - 分配任务
如图依次点击
这里举一个例子,其他步骤是一样的。关键的地方就是看清楚Parent
写的是父工程中对应的artifactId
验证:在父工程中可以看见一个蓝色向下的箭头:
这表示该工程下已经创建了一个独立的子模块。
然后将这些模块从低向下的工作顺序分配出去即可。子模块之间可以通过在dependencies
中写入其他子模块的描述(如下),进行依赖,例如:service
层依赖mapper
层
<dependency>
<groupId>top.chengyunlai</groupId>
<artifactId>mapper</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>