前言
通常SpringBoot新建项目,默认是集成了Maven,然后所有内容都在一个主模块中。 
如果项目架构稍微复杂一点,就需要用到Maven多模块。 
本文简单概述一下,新建一个SpringBoot Maven 多模块项目的流程。 
具体内容还需要参考你具体的项目中的实际需求, 
我这里只按照大多数通常的情况为准创建一个基础款demo。 
另外模块都只基于Maven的默认模板进行创建, 
需要SpringBoot是用手动新建文件的方式来实现。
环境: 
- Java 1.8 
- IntelliJ IDEA 2020.01 
- Maven 3.3.9 
- SpringBoot 2.2.6.RELEASE 
- Mybatis Plus 3.3.1
折腾
第一步 新建一个maven项目
1 新建项目 Create New Project
2 选择Maven 然后直接下一步 

3 根据需要修改配置,然后Finish即可 

4 直接删除不需要的文件夹和文件,如 src文件夹 

第二步 新建子模块
右击项目 -> New -> Module 

同样选择Maven 直接下一步 完成 


重复以上步骤,建立所有需要的子模块 
并删除不需要的文件或文件夹 
例如test文件夹

第三步 配置Maven
主项目 pom.xml
<?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.demo</groupId><artifactId>modules-demo</artifactId><packaging>pom</packaging><version>1.0.0</version><name>modules-demo</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.6.RELEASE</version></parent><modules><module>module-api</module><module>module-admin</module><module>module-common</module></modules><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><mysql.version>8.0.19</mysql.version><fastjson.version>1.2.68</fastjson.version><mybatisplus.spring.boot.version>3.3.1</mybatisplus.spring.boot.version><mybatisplus.generator.version>3.3.1</mybatisplus.generator.version><freemarker.version>2.3.30</freemarker.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus.spring.boot.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatisplus.generator.version}</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>${freemarker.version}</version></dependency></dependencies><repositories><repository><id>public</id><name>aliyun nexus</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases></repository></repositories><pluginRepositories><pluginRepository><id>public</id><name>aliyun nexus</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories></project>
工具性质 子项目 pom.xml
<?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>modules-demo</artifactId><groupId>com.demo</groupId><version>1.0.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>module-common</artifactId><packaging>jar</packaging><build><finalName>${project.artifactId}</finalName></build></project>
接口性质 子项目 pom.xml
<?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>modules-demo</artifactId><groupId>com.demo</groupId><version>1.0.0</version></parent><modelVersion>4.0.0</modelVersion><artifactId>module-admin</artifactId><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin></plugins></build></project>
打包时,工具类的会先生成jar包,并引入到接口类中,接口类再生成war包,可以放Tomcat下运行
第四步 配置SrpingBoot
接口类加入启动类和配置文件

手动创建启动类 
ModuleAdminApplication.java
package com.demo.modules.admin;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan(basePackages = "com.demo.modules.admin.mapper")public class ModuleAdminApplication {public static void main(String[] args) {SpringApplication.run(com.demo.modules.admin.ModuleAdminApplication.class, args);}}
ServletInitializer.java
package com.demo.modules.admin;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;public class ServletInitializer extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(ModuleAdminApplication.class);}}
配置文件 
application.yml
spring:profiles:active: devjackson:time-zone: GMT+8serialization:write-dates-as-timestamps: true
application-dev.yml
# 开发环境server:port: 10000servlet:context-path: /modules/admin/devspring:servlet:multipart:max-file-size: 100MBmax-request-size: 100MBdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/modules?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: rootredis:database: 9mybatis-plus:mapper-locations: classpath*:/mapper/*.xmltype-aliases-package: com.demo.modules.admin.serivceglobal-config:db-config:id-type: autologic-delete-value: 1logic-not-delete-value: 0insert-strategy: not_nullupdate-strategy: not_nullselect-strategy: not_nullbanner: falseconfiguration:map-underscore-to-camel-case: truecache-enabled: truecall-setters-on-nulls: truelogging:file: logs/modules.admin.dev.loglevel.com: debug
application-prod.yml
# 生产环境server:port: 10000servlet:context-path: /modules/admin/prodspring:jmx:enabled: falseservlet:multipart:max-file-size: 20MBmax-request-size: 20MBdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://mysql:3306/modules?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: rootredis:database: 10host: redisport: 6379timeout: 15sjedis:pool:max-active: 1000max-wait: -1msmin-idle: 4max-idle: 20mybatis-plus:mapper-locations: classpath*:/mapper/*.xmltype-aliases-package: com.demo.modules.admin.serivceglobal-config:db-config:id-type: autologic-delete-value: 1logic-not-delete-value: 0insert-strategy: not_nullupdate-strategy: not_nullselect-strategy: not_nullbanner: falseconfiguration:map-underscore-to-camel-case: truecache-enabled: truecall-setters-on-nulls: truelogging:file: logs/modules.admin.prod.loglevel.com: warn
第五步 Maven 打包生成war
 
直接用Idea自带的可视化即可。 
先去settings中配置好maven目录
在Maven面板中找到根项目, 
选择clean  
再选择install 
大功告成!
END
最终效果 
Gitee: https://gitee.com/tczmh/modules-demo