【架构演进系列02】搭建基于Maven多模块的单体项目

1,544 阅读3分钟

1. Maven多模块开发模式

1.1 什么是Maven多模块

一个完整的项目其实是由多个业务模块组成的,因此,为了更好地理解一个完成的项目,可以根据使用功能或者业务功能将一个项目划分成多个jar包,这些jar包可以看做完整项目的子系统,最终这些jar包将引入到完整项目中,聚合成一个war包,运行在Servlet容器中为用户提供服务。

1.2 为什么使用Maven多模块

  1. 分布式、微服务已成大势,可以说所有的项目从无到有的发展,一定都会经历这个阶段,所以在现有的项目中,都应将这一因素考虑进去,提前做好代码间的拆分工作。
  2. 分布式、微服务虽然是一个软件走向完善、强大的必经之路,但是,并不是每个项目都能走那么远,根据已有业务合理的调整架构、分配服务器资源才是合理的做法。
  3. 相比于分布式、微服务来说,基于Maven模块化的单体项目能更快的迭代出用户想要的东西。

2. 创建地球数仓项目

2.1 开发环境

IntelliJ IDEA :2019.3

JDK:1.8.191

Maven:3.6.2

2.2 主体项目

创建maven项目

选择maven后直接选择Next

配置项目信息

2.3 基于MVC的项目分层

关系图

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

依赖图

2.4 基于依赖先后创建子模块

2.4.1 创建Commons模块

右击主体项目,添加Modules

添加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.yml

添加Application.java启动类

Application.java

添加代码

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

启动Application.java类,访问localhost:8080可以访问到如下页面

网页信息

控制台输出如下信息

log日志

至此,模块项目搭建完成