一,模块介绍
chat-service-base 用于编写业务逻辑,不对外暴露
chat-service-common 用于存放一些公用的模块,例如枚举,topic
chat-service-socket 用于维护socket连接
cha-service-vue 前端代码模块
chat-service-web web模块,为前端提供一些接口
1. base模块
base模块主要是用于编写一些公用的业务逻辑,所以base模块的依赖也是和公用业务相关的。
<dependencies>
<dependency>
<groupId>com.qcby</groupId>
<artifactId>chat-service-common</artifactId>
</dependency>
<!-- 阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!--aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- xxl-job-core -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-core</artifactId>
</dependency>
</dependencies>
因为common模块存放着公用的工具类,所以这里引用了common模块。
<dependency>
<groupId>com.qcby</groupId>
<artifactId>chat-service-common</artifactId>
</dependency>
依赖是可以传递的。
所以在common模块所引用的依赖不需要在base模块中重复引用。
2.Common模块
在分布式项目中各个模块都是分离的,但是枚举等通用工具类是各个模块都通用的,在传统的项目中是将模块和工具类都塞在一个项目中。
但是在分布式项目中,每个模块都是分开独立的项目,如果需要修改只需要修改common模块的jar包即可,而jar包通过pom.xml管理。
而common模块出现的依赖一般是与业务无关的,例如chatservice-common的依赖。
<dependencies>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<!-- 阿里JSON解析器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
</dependency>
</dependencies>
二,Maven项目管理中的依赖管理 dependencyManagement
通常在父项目的pom.xml中会使用dependencyManagement让所有子项目导入依赖时不需要考虑版本问题直接导入,子项目会依照父项目dependencyManagement中的版本号。
dependencyManagement仅仅声明,而dependencies都会自动引入,并默认被所有的子项目继承。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qcby</groupId>
<artifactId>chatService</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<modules>
<module>chat-service-web</module>
<module>chat-service-socket</module>
<module>chat-service-common</module>
<module>chat-service-base</module>
</modules>
<properties>
<spring-boot-dependencies.version>2.5.14</spring-boot-dependencies.version>
<chat-service.version>1.0.0</chat-service.version>
<tio-websocket-server.version>3.5.0.v20190822-RELEASE</tio-websocket-server.version>
<lombok.version>1.18.12</lombok.version>
<druid.version>1.2.11</druid.version>
<fastjson.version>1.2.73</fastjson.version>
<xxl-job-core.version>2.3.0</xxl-job-core.version>
<redisson.version>3.11.1</redisson.version>
<hutool.version>5.4.0</hutool.version>
<fastdfs.version>1.26.2</fastdfs.version>
<mybatis-plus.version>3.4.2</mybatis-plus.version>
<redisson.version>3.14.1</redisson.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--tio-socket-->
<dependency>
<groupId>org.t-io</groupId>
<artifactId>tio-websocket-server</artifactId>
<version>${tio-websocket-server.version}</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- 阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 阿里JSON解析器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!-- 通用模块 -->
<dependency>
<groupId>com.qcby</groupId>
<artifactId>chat-service-common</artifactId>
<version>${chat-service.version}</version>
</dependency>
<!-- 业务模块 -->
<dependency>
<groupId>com.qcby</groupId>
<artifactId>chat-service-base</artifactId>
<version>${chat-service.version}</version>
</dependency>
<!-- web模块 -->
<dependency>
<groupId>com.qcby</groupId>
<artifactId>chat-service-web</artifactId>
<version>${chat-service.version}</version>
</dependency>
<!-- socket模块 -->
<dependency>
<groupId>com.qcby</groupId>
<artifactId>chat-service-socket</artifactId>
<version>${chat-service.version}</version>
</dependency>
<!-- xxl-job-core -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>${xxl-job-core.version}</version>
</dependency>
<!--hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!-- fastdfs -->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>${fastdfs.version}</version>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- redisson -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>${redisson.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
三,relativePath
在子项目的pom.xml中会使用如下代码:
<parent>
<artifactId>chatService</artifactId>
<groupId>com.qcby</groupId>
<version>1.0.0</version>
<relativePath/>
</parent>
relativePath其实是指定查找父项目的pom.xml的相对路径。默认查找顺序为:relativePath -> 本地仓库 -> 远程仓库
如果不使用relativePath标签则默认会在pom.xml的上一级目录查找。