springboot maven父子模块+聚合
最近做一个项目用到了maven的父子模块这样的一个结构啊,这个结构的好处呢就是复用了,类似于java的继承了,子模块继承了父模块的依赖等,既然我们又使用了父子模块那么我们的打包方式也是不一样的,不能在各个模块中打包
package或者install而是在父模块中进行打包。
创建父子模块
我们这里的项目结构是这样的,MyBlog-system是整个maven项目的根目录,它是不需要src这个目录的直接删掉.

父模块.pom 这里只需要用<dependencyManagement />指定相应的版本,这个dependencyManagement仅仅只是代表了指定版本并没有导入依赖
代码
<?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.mrs</groupId>
<artifactId>MyBlog-system</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mrs-framework</module>
<module>mrs-admin</module>
<module>mrs-blog</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<!--指定依赖版本 注意!!!(这里只是指定版本并没有导入)-->
<dependencyManagement>
<dependencies>
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--fastjson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.33</version>
</dependency>
<!--jwt依赖-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
<!--mybatisPlus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!--阿里云OSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
创建公共的模块
这里创建了三个子模块,mrs.framework是公共的模块,所有的模块都可以使用它的依赖,也是为了复用,因为父模块只是指定了版本并没有导入依赖,所有我们在公共的模块还是需要导入依赖的。
代码
<?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">
<parent>
<artifactId>MyBlog-system</artifactId>
<groupId>com.mrs</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<!--公共子模块-->
<modelVersion>4.0.0</modelVersion>
<groupId>com.mrs</groupId>
<artifactId>mrs-framework</artifactId>
<!--导入依赖包,版本依赖于父模块-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombk-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--junit-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--SpringSecurity启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!--redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--fastjson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!--jwt依赖-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<!--mybatisPlus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!--mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--阿里云OSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<!--AOP-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
</dependencies>
</project>
这里值得注意的是:当你创建了一个子模块时,你的父模块的<model>是自动导入的所以你是不用自己写的

创建第二个子模块
这里的第二个子模块是使用公共的模块mrs-framework,只需要引入依赖即可使用所有公共模块的依赖
<?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">
<parent>
<artifactId>MyBlog-system</artifactId>
<groupId>com.mrs</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!--博客前台模块sangeng-blog-->
<artifactId>mrs-blog</artifactId>
<dependencies>
<dependency>
<groupId>com.mrs</groupId>
<artifactId>mrs-framework</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

第三个子模块
和第二个子模块同理,同样是使用了公共模块的依赖
<?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">
<parent>
<artifactId>MyBlog-system</artifactId>
<groupId>com.mrs</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!--博客后台模块sangeng-admin-->
<artifactId>mrs-admin</artifactId>
<dependencies>
<dependency>
<groupId>com.mrs</groupId>
<artifactId>mrs-framework</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

可以看到也是成功了使用了公共模块的所有依赖

实战演练
由于重复的代码很多,所以我们把所有公共的代码放到公共模块中,使用的话,就在当前工程中直接注入即可,因为继承了公共模块的所有东西

这里需要注意的是如果出现问题呢,打个比方:我在公共模块中加了几行代码,但是其他模块没有反应过来,这里就需要在整个maven的父模块中install一下,即可解决问题。


浙公网安备 33010602011771号