首页 专题 文章 代码 归档

SpringBoot搭建多模块开发系统(结构)

1. 前言

1、“高内聚、低耦合”,spring-mvc项目,一般会把项目分成多个包:controller、service、mapper(dao)、common(如util)等,但是随着项目的复杂性提高,想复用其他一个模块的话,因为是包的形式,剥离出来会比较困难,耦合性有点强,常用的方法就是复制代码修改,但是这样会做很多无用功与增加出错几率。

2、而我们这里的“多模块”就是利用Maven以及打包方式,把按包分模块的模式,在多模块jar模式下可以将某个jar拿出来对外共用,能大大提高代码复用率与开发效率。

简单说也很简单,就是把原来的每个包(controller、service....等等)建立成模块;而这些模块之间又如何建立联系?利用Maven;

2. 步骤

建立父包,也即整个项目的父级;

截图-1587474608

父级项目也就是来管理依赖的,所以我们这里选择Maven POM(也即打包方式packging为pom),这样父级也就是管理依赖的;


然后建立多个模块(controller、service、mapper)

截图-1587474708

步骤和我们建立普通的SpringBoot的步骤一致,注意这里的packing就是默认的jar了;

建立完成的目录如下:

截图-1587474790

modules是整个父级,旗下common、controller、mapper、service就是模块;


现在要做的就是修改各自的pom.xml文件;

父级modules

主要就是添加:

<modules>
    <module>controller</module>
    <module>service</module>
    <module>mapper</module>
    <module>common</module>
</modules>

这些module标签;

<?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.6.RELEASE</version>
    </parent>
    <groupId>com.misiai</groupId>
    <artifactId>modules</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>modules</name>
    <description>The Modules Parent</description>

    <properties>
        <java.version>1.8</java.version>
        <project.version>0.0.1-SNAPSHOT</project.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </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>

    <modules>
        <module>controller</module>
        <module>service</module>
        <module>mapper</module>
        <module>common</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

子级pom的修改

传统的MVC就是:controller调用service,service调用mapper(dao),所以这里需要修改两处:

一是:

这些子模块的parent,就是我们上面的父级:

<parent>
    <groupId>com.misiai</groupId>
    <artifactId>modules</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

需要将所有子模块的父级项目都像这样修改,才有效哈!

二是:

根据传统的MVC模式,所以我们需要添加依赖:

比如:controller依赖service,那么controller模块的pom.xml文件还需要:

<dependencies>
    <dependency>
        <groupId>com.misiai.moduels</groupId>
        <artifactId>service</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

再比如:service依赖mapper

<dependencies>
    <dependency>
        <groupId>com.misiai.modules</groupId>
        <artifactId>mapper</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

当然,实际开发中,每个子模块都有一些依赖,所以肯定不止上面的这种controller依赖service,service依赖mapper这么简单,但是不管如何,如果我们需要使用其他模块的一些东西,那么就必须在自身的pom.xml文件中添加对方的依赖,然后导包才有效,才能使用;

3. 采坑点

1、不要加<relativePath/>

截图-1587609780

Idea默认新建module时,会自动加上<relativePath/>,加了就坏事,mvn package就会报错,不加默认是"../pom.xml",你如果只加<relativePath/>反而会报错;

2、打包时跳过测试

打包时,测试是非常好的一个习惯,但是如果一直报错,就不美了,至于原因,还未知;

在父项目中添加如下插件即可跳过测试;

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
    </plugins>
</build>
此文阅读完毕,您可以:分享
二维码图片 扫描关注我们哟