1. 引言
传统的web应用,我们通常采用单一项目工程结构。而到了分布式架构系统中,尤其是微服务概念盛行的今天,这种项目结构早已满足不了我们的要求。比如设计一个互联网电商微服务架构系统,往往会被拆分成多个微服务子系统,如前端、支付、物流、订单和库存,各个子系统独立部署,通过http调用,减少耦合。
本文将探索如何使用IntelliJ IDEA基于Maven创建多模块项目。本项目也是后续SpringBoot如何快速集成第三方技术系列文章的开端项目,源码将发布于github上,欢迎持续关注。
2. 项目结构
这次我们搭建的多模块项目主要包含
- springboot-commen 公共服务模块
- springboot-swagger Springboot集成Swagger技术模块
- springboot-mybatis Springboot集成Mybatis技术模块
公共服务组件主要存放一些通用的服务组件,后续其它第三方技术系列文章的工程也将在该项目中以新增模块发布。
3. 搭建部署步骤
3.1 创建聚合工程parent
对于这些模块,我们需要聚合parent maven项目,统一管理他们,下面就来创建一个parent项目。
选择新建的项目类型为Spring Initializr,快速创建Springboot项目。
选择initial项目类型.png
根据实际要求,设置项目属性。后面Next直接使用默认选项,关于导入其他依赖包,我们手动导入。
设置工程属性.png
由于springboot-tech为聚合管理工程,并不需要src目录,可以直接删除,然后修改聚合工程springboot-tech的pom文件。
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 项目说明:这里作为聚合工程的父工程,修改打包为pom聚合工程 -->
<groupId>com.qinghaihu</groupId>
<artifactId>sprinboot-tech</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>sprinboot-tech</name>
<description>Demo project for Spring Boot Technology</description>
<!-- 继承说明:这里继承SpringBoot提供的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 版本说明:这里统一管理依赖的版本号,为了各个子module依赖包的一致性,避免版本不一致导致冲突问题 -->
<properties>
<java.version>1.8</java.version>
</properties>
<!--依赖说明:公共的maven库在这里添加,每个工程独有的maven包,在各个子工程添加,但是版本号都是在父工程统一配置-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 注意: 因为我们不需要springboot-tech是一个可运行的项目,所以修改原来的打包方式为maven打包方式 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
parent项目建立完毕,下面在此项目下新建我们需要的模块,
3.2 添加子模块项目
这里需要注意一下,如果想要建立对应项目下的module项目,那么鼠标先选中该项目名称(对照上图)在选择File>>new>>Module,因为所有的new都是相对你选中的目录来的。
new module.png module springbootswagger.png
同样的方法,新建剩余的其它模块,新建完成后的目录结构如下图。
directory.png
3.3 建立模块关系
接下来,首先建立相互关系,parent项目springboot-tech pom文件中配置子模块,添加modules标签.
<modules>
<module>springboot-common</module>
<module>springboot-swagger</module>
<module>springboot-mybatis</module>
</modules>
修改子模块pom文件,继承于父模块。添加子模块的其它jar包依赖,也可依赖公共服务模块,子模块个性化配置。以springboot-swagger子模块为例:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/>
</parent>
-->
<!--继承父模块parent工程-->
<parent>
<groupId>com.qinghaihu</groupId>
<artifactId>sprinboot-tech</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.qinghaihu</groupId>
<artifactId>springboot-swagger</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-swagger</name>
<description>Demo project for Spring Boot Swagger</description>
<properties>
<!-- maven可以继承父项目中的参数,所以可以删除子模块中定义 -->
<!--<java.version>1.8</java.version>-->
</properties>
<dependencies>
<!--maven可以继承父项目中的依赖,所以可以删除子模块中定义 -->
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
-->
<!--依赖公共服务模块-->
<dependency>
<groupId>com.qinghaihu</groupId>
<artifactId>springboot-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.4 打包发布
在 maven project侧边栏中,先点击parent项目的clean,然后点击package或install进行打包或发布。
package .png
网友评论