1. Maven多模块开发模式
1.1 什么是Maven多模块
一个完整的项目其实是由多个业务模块组成的,因此,为了更好地理解一个完成的项目,可以根据使用功能或者业务功能将一个项目划分成多个jar包,这些jar包可以看做完整项目的子系统,最终这些jar包将引入到完整项目中,聚合成一个war包,运行在Servlet容器中为用户提供服务。
1.2 为什么使用Maven多模块
- 分布式、微服务已成大势,可以说所有的项目从无到有的发展,一定都会经历这个阶段,所以在现有的项目中,都应将这一因素考虑进去,提前做好代码间的拆分工作。
- 分布式、微服务虽然是一个软件走向完善、强大的必经之路,但是,并不是每个项目都能走那么远,根据已有业务合理的调整架构、分配服务器资源才是合理的做法。
- 相比于分布式、微服务来说,基于Maven模块化的单体项目能更快的迭代出用户想要的东西。
2. 创建地球数仓项目
2.1 开发环境
IntelliJ IDEA :2019.3
JDK:1.8.191
Maven:3.6.2
2.2 主体项目

选择maven后直接选择Next

2.3 基于MVC的项目分层

通过关系图我们可以看到,Controller需要依赖Services,Services需要依赖Mappers,而Controller、Services、Mappers都要依赖pojo类,最后所有的模块都要依赖于Commons模块,又基于模块间依赖的传递性,最后得到如下的依赖图

2.4 基于依赖先后创建子模块
2.4.1 创建Commons模块
右击主体项目,添加Modules


依然是直接Next

点击finish后项目结构变为

2.4.2 创建pojo模块
创建方法与commons模块相同,但需要在pom文件中添加commons依赖
<dependencies>
<dependency>
<groupId>com.magic</groupId>
<artifactId>earth-data-warehouse-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
2.4.3 依次创建mappers、services、controller模块
根据pojo模块的创建流程创建剩下的模块,其中mappers模块依赖于pojo模块,services模块依赖于mappers模块,controller模块依赖于services模块(由于要进行前后分离开发,所以controller模块我直接命名为api模块)
创建完后,文件目录结构如下

mappers、services、controller添加如下依赖
<!-- mappers -->
<dependencies>
<dependency>
<groupId>com.magic</groupId>
<artifactId>earth-data-warehouse-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<!-- services -->
<dependencies>
<dependency>
<groupId>com.magic</groupId>
<artifactId>earth-data-warehouse-mappers</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<!-- controller -->
<dependencies>
<dependency>
<groupId>com.magic</groupId>
<artifactId>earth-data-warehouse-services</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
3. 添加SpringBoot依赖
在主项目的pom文件中添加下列配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
4. 添加SpringBoot配置文件和启动类
在controllers(api)模块中添加application.yml文件(暂时不用编写内容)

添加Application.java启动类

添加代码
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
启动Application.java类,访问localhost:8080可以访问到如下页面

控制台输出如下信息

至此,模块项目搭建完成