目录
准备创建四个子模块的maven项目,四个子模块依次为random-common、random-mbg、random-admin、random-wx。先放个已完成的结构图:
- random父模块只管理依赖版本;
- random-common子模块中主要放一些不涉及业务的工具类,比如时间工具类、分页工具类、POI工具类等等;
- random-mbg子模块中主要是mybatis相关的东西,包括pojo、mapper以及generator等;
- random-admin子模块主要是后台管理系统相关的东西,该模块我们准备不采用前后端分离的方式,而是用Thymeleaf开发页面;
- random-wx子模块主要用于对外接口,暂时确定为微信小程序的接口,如有变动再进行修改。
1、创建Parent模块
上一篇我们已经创建好一个SpringBoot项目,不知道怎么创建的朋友们可以看下上一篇内容,这里就不再赘述。我们直接将已创建好的Springboot项目改为多模块项目的parent部分,上一篇我们创建好的项目结构如图所示,
将图中标注的都删掉,只保留.idea、.gitignore、pom.xml和random.iml,删除后的项目结构如下:
2、创建子模块
创建random-common子模块,右键项目名,选择New->Module
在弹出页面中选择Spring Initializr,其它默认,点击Next。
将Group改为和parent父模块一致,我这是top.plgxs,Artifact改为random-common,Packaging选择jar,Java Version选择8,Name、Description和Package会自动生成,但自动生成的Package是top.plgxs.randomcommon,我们将random去掉改为top.plgxs.common,改完点击Next。
Dependencies中我们什么都不用选,直接点击Next。
Module name、Content root和Module file location会自动生成,按默认的来就可以,直接点击Finish。
创建好的项目结构如下图,将.mvn、HELP.md、mvnw、mvnw.cmd删除。ps:pom.xml报错先不用管,最后还要修改。
至此random-commont子模块已创建完成,其它子模块也按上述步骤进行创建。我们共创建random-common、random-mbg、random-admin和random-wx四个子模块。 总体项目结构图如下:
3、配置pom.xml
random-wx子模块的pom.xml文件,暂时先不做配置,等用到的时候再配置。改完pom.xml后先别点击Import Changes,等全部修改后再一起引入。
3.1、random父模块的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>top.plgxs</groupId>
<artifactId>random</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>random</name>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modules>
<module>random-admin</module>
<module>random-common</module>
<module>random-mbg</module>
<module>random-wx</module>
</modules>
<properties>
<java.version>1.8</java.version>
<pagehelper-starter.version>1.3.0</pagehelper-starter.version>
<pagehelper.version>5.2.0</pagehelper.version>
<mybatis-generator.version>1.4.0</mybatis-generator.version>
<mybatis.version>3.5.5</mybatis.version>
<mybatis-springboot-starter.version>2.1.4</mybatis-springboot-starter.version>
<mysql-connector.version>8.0.22</mysql-connector.version>
<druid.version>1.1.23</druid.version>
<hutool.version>5.4.0</hutool.version>
<swagger2.version>2.9.2</swagger2.version>
<swagger-models.version>1.6.0</swagger-models.version>
<swagger-annotations.version>1.6.0</swagger-annotations.version>
<logstash-logback.version>5.3</logstash-logback.version>
<jackon-databind.version>2.11.0</jackon-databind.version>
<fastjson.version>1.2.73</fastjson.version>
<spring-data-commons.version>2.3.0.RELEASE</spring-data-commons.version>
<jjwt.version>0.9.0</jjwt.version>
<aliyun-oss.version>2.5.0</aliyun-oss.version>
<junit.version>5.7.0</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- pagehelper-springboot -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper-starter.version}</version>
</dependency>
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!-- MyBatis 生成器 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis-generator.version}</version>
</dependency>
<!-- MyBatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- MyBatis-springboot -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-springboot-starter.version}</version>
</dependency>
<!-- tk.mybatis -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${tkmybatis-springboot.version}</version>
</dependency>
<!--Mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<!--集成druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--Hutool Java工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!--Swagger-UI API文档生产工具-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger2.version}</version>
</dependency>
<!--解决Swagger 2.9.2版本NumberFormatException-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>${swagger-models.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger-annotations.version}</version>
</dependency>
<!--集成logstash-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>${logstash-logback.version}</version>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackon-databind.version}</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--SpringData工具包-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>${spring-data-commons.version}</version>
</dependency>
<!--JWT(Json Web Token)登录支持-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt.version}</version>
</dependency>
<!-- 阿里云OSS -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-oss.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
3.2、random-common的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>random</artifactId>
<groupId>top.plgxs</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>random-common</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
</dependencies>
</project>
3.3、random-mbg的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>random</artifactId>
<groupId>top.plgxs</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>random-mbg</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>top.plgxs</groupId>
<artifactId>random-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
3.4、random-admin的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>random</artifactId>
<groupId>top.plgxs</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>random-admin</artifactId>
<packaging>jar</packaging>
<name>random-admin</name>
<dependencies>
<dependency>
<groupId>top.plgxs</groupId>
<artifactId>random-mbg</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<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>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
至此,pom文件都已修改完成,点击Import Changes引入依赖,PS:先确认下maven仓库是否是自己已配置好的。
4、配置application.yml
在random-admin的resources下面将自动生成的application.properties删除,右键New->File,输入application.yml。打开application.yml,将以下内容放入:
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/random?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username: random
password: random
druid:
initial-size: 5 #连接池初始化大小
min-idle: 10 #最小空闲连接数
max-active: 20 #最大连接数
web-stat-filter:
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" #不统计这些请求数据
stat-view-servlet: #访问监控网页的登录用户名和密码
login-username: druid
login-password: druid
5、解决依赖报红问题
点击Import Changes引入依赖后,点击IDEA页面右侧的maven查看是否有报红的,若有解决方法如下:
(1)清除缓存然后重启IDEA。File->invalidate caches/restart,选择Invalidate and Restart,此时IDEA会重新启动,若还是报红转下一步。
(2)屏幕右侧找到maven,在lifecycle中选择clean,然后install。
(3)若install时出现Cannot resolve xxxxxx的情况,则先reimport一下,可以选择报红的模块右键选择maven->reimport,也可以点击下图的位置。
(4)reimport后如果还是报红,重复步骤一,重启后点击屏幕右侧Maven projects,找到报红的依赖,以下图org.mybatis:mybatis-spring-1.3.2为例,如果该依赖报红,则找到本地仓库的该jar包的位置,将1.3.2文件夹删除。(也可以将1.3.2文件夹内的以.lastUpdated结尾的文件删除,但有时只删除.lastUpdated文件重新download时还会出现.lastUpdated文件,这个看个人情况了)
回到IDEA,右键该依赖,选择Download Sources and Documentation,全部重新Download后,清除缓存重启IDEA,至此报红问题全部解决。
最后,如果有出现Could not transfer artifact xxx from/to xxx的问题,也可以通过删除本地jar包再重新下载进行解决。
6、其它问题
(1)maven install时出现Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
在random-admin的pom文件中,修改<build><plugins>
,内容如下:
<build>
<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>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>