文章目录

  • 项目框架搭建
  • 新建一个Maven项目
  • 新建common模块
  • 新建dao模块
  • 新建service模块
  • 新建web模块
  • pom文件编写
  • common模块:
  • dao模块:
  • service模块:
  • web模块:
  • 多模块项目测试
  • 聚合和继承的关系

项目框架搭建

首先看一下一个简单的的项目模块骨架,接下来就一步一步搭建多模块项目。

springboot 怎么new一个新moudle_spring

新建一个Maven项目

首先,新建一个Maven项目,将项目下的src目录删除。

springboot 怎么new一个新moudle_spring boot_02

新建common模块

在上面新建的Maven项目文件夹下新建一个新的模块common,指定父项为untitled。

springboot 怎么new一个新moudle_xml_03

新建dao模块

新建dao模块,和新建common模块一样的步骤。

新建service模块

新建service模块,和新建common模块一样的步骤。

新建web模块

新建web模块,和之前的模块不一样的是web模块是springboot项目模块,所以在新建web模块时需要使用Spring Initializr来创建模块。

springboot 怎么new一个新moudle_spring_04


为web模块添加web相关的starter依赖

springboot 怎么new一个新moudle_spring_05


完成上面各个模块的创建之后,基本的项目骨架就出来了,接下来在模块的pom文件中添加相关的依赖。

pom文件编写

查看父模块的pom文件,聚合了common、dao、service、web四个模块,如下

springboot 怎么new一个新moudle_xml_06


查看其余四个子模块,发现有公共部分,都继承了父模块,如下:

common模块:

springboot 怎么new一个新moudle_spring boot_07

dao模块:

springboot 怎么new一个新moudle_maven_08

service模块:

springboot 怎么new一个新moudle_spring boot_09

web模块:

springboot 怎么new一个新moudle_spring_10


接下来,描述以下各个模块之间的依赖关系。common模块一般不依赖任何模块,dao模块一般依赖于common模块,service模块一般依赖于dao模块,web模块一般依赖于service模块。通过理清各个模块之间的关系之后,给模块pom文件添加依赖。

dao的pom文件:

<!-- 指定依赖的父模块 -->
 <dependency>
     <groupId>org.example</groupId>
     <artifactId>common</artifactId>
     <version>1.0-SNAPSHOT</version>
 </dependency>

service的pom文件:

<!-- 指定需要依赖的模块 -->
<dependency>
    <groupId>org.example</groupId>
    <artifactId>dao</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

web的pom文件:

<!-- 指定依赖的模块 -->
<dependency>
    <groupId>org.example</groupId>
    <artifactId>service</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

最后,逐个完善pom文件

父项目pom文件:

<?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>org.example</groupId>
    <artifactId>springboot-multi</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>common</module>
        <module>dao</module>
        <module>service</module>
        <module>web</module>
    </modules>

    <properties>
        <springboot-version>2.3.0.RELEASE</springboot-version>
        <myabits-springboot>2.1.2</myabits-springboot>
        <mysql-connector-java>5.1.46</mysql-connector-java>
        <lombok-version>1.18.12</lombok-version>
        <druid-version>1.1.13</druid-version>
    </properties>

    <!--统一管理子模块的依赖
        如果不用dependencyManagement进行统一管理,
        当父工程导入依赖时,统一会给所有的子模块导入父工程所有的依赖
        这会造成大量的依赖冗余和冲突。
    -->
    <dependencyManagement>
        <dependencies>
            <!--springboot-stater-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${springboot-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${springboot-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
                <version>${springboot-version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${myabits-springboot}</version>
            </dependency>
            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok-version}</version>
            </dependency>
            <!--druid-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid-version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

common模块pom文件:

<?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>springboot-multi</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>common</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

dao模块pom:

<?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>springboot-multi</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dao</artifactId>

    <dependencies>
        <!-- 指定依赖的父模块 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

service模块pom:

<?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>springboot-multi</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dao</artifactId>

    <dependencies>
        <!-- 指定依赖的父模块 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

web模块pom:

<?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>com.lwz</groupId>
    <artifactId>multi</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>multi</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <artifactId>springboot-multi</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <!-- 指定依赖的模块 -->
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>service</artifactId>
            <version>1.0-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-test</artifactId>
        </dependency>

    </dependencies>

</project>

通过以上的步骤,多模块项目就搭建好了,接下来就使用IDEA自带的maven工具对多模块项目进行测试。

多模块项目测试

使用maven工具对多模块项目进行测试,首先对父项目的pom文件进行clean:

springboot 怎么new一个新moudle_spring boot_11


clean后输出结果如下:

springboot 怎么new一个新moudle_maven_12


springboot 怎么new一个新moudle_xml_13


接下来,对父项目的pom文件进行package,打包后各个模块都会生成target文件夹结果如下:

springboot 怎么new一个新moudle_spring boot_14

聚合和继承的关系

聚合主要是为了方便多模块快速构建。而继承主要是为了重用相同的配置。

对于聚合来说,聚合模块是知道被聚合模块的存在的,而被聚合模块是感知不到聚合模块的存在。对于继承来说,父构件是感知不到子构件的存在,而子构件需要使用 parent 来引用父构件。

两者的共同点是,聚合模块和继承中的父模块的package属性都必须是pom类型的,同时,聚合模块和父模块中的除了pom.xml,一般都是没有什么内容的。实际使用是,我们经常将聚合和继承一起使用,能同时使用到两者的优点。