美文网首页
Spring boot 多模块项目搭建、打包、拆分

Spring boot 多模块项目搭建、打包、拆分

作者: 板栗炖牛肉 | 来源:发表于2020-12-16 12:18 被阅读0次

前言

整篇文章包含了、基础搭建、项目打包、项目拆分运行、项目联合运行,着重查看

基础搭建

1.创建一个spring boot项目(保证创建项目能够运行)

步骤一
步骤二(只做demo演示)
步骤三(选中web,看个人项目架构)

2.新建Spring boot module


步骤一

3.新建module重复上述步骤(步骤三不勾选),建三个module演示(称为子级项目)


目录展示

4.删除多余文件


删除Src目录(父级项目下,其他如.mvn文件等看个人需不需要版本控制)

5.重点。配置pom文件(我们接下来以module1作为入口项目,module2/3作为依赖项目,如何依赖看项目架构是什么样的,接下来叙述)


展示pom

6.先修改父级项目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 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.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.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-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

  • 修改后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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.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-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


    <!--删除了build,添加了packaging并且改为pom-->
    <packaging>pom</packaging>

   <!--添加module-->
    <modules>
        <module>module1</module>
        <module>module2</module>
        <module>module3</module>
    </modules>

</project>

  • 主要
    <!--删除了build,添加了packaging并且改为pom-->
    <packaging>pom</packaging>

   <!--添加module-->
    <modules>
        <module>module1</module>
        <module>module2</module>
        <module>module3</module>
    </modules>

7.修改module1(注意、此处比较特殊,因为是作为入口)

  • 修改前
<?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.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>module1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>module1</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <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-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

  • 修改后
<?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>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>


    <groupId>com.example</groupId>
    <artifactId>module1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>module1</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <!--删除了多余依赖、由父级pom管理-->


        <!--添加了module1依赖于module2依赖(此处注意,如果是个人框架mvc模式区分,module2可以看做service层,)-->
        <!--module3可以看做dao层,那么此处仅有依赖module2,而module2依赖于module3。我们此处案列是需要拆分的所以看成是多人聚合项目)-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>module2</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.example</groupId>
            <artifactId>module3</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

    </dependencies>

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

</project>


  • 主要
    <!--修改为父级-->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

      <dependencies>

        <!--删除了多余依赖、由父级pom管理-->


        <!--添加了module1依赖于module2依赖(此处注意,如果是个人框架mvc模式区分,module2可以看做service层,)-->
        <!--module3可以看做dao层,那么此处仅有依赖module2,而module2依赖于module3。我们此处案列是需要拆分的所以看成是多人聚合项目)-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>module2</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.example</groupId>
            <artifactId>module3</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

    </dependencies>

8.修改module2(多人子项目2)

  • 修改前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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>module2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>module2</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <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-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

  • 修改后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>

    <!--修改为父级-->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>module2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>module2</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <!--删除了多余依赖、由父级pom管理-->

    </dependencies>

       <!--删除build、或者改成不可执行jar包、二选一-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--此处修改-->
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>


</project>

  • 主要
 <!--修改为父级-->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

  <dependencies>

        <!--删除了多余依赖、由父级pom管理-->

    </dependencies>

      <!--删除build、或者改成不可执行jar包、二选一-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--此处修改-->
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>

9.修改module3,步骤与module2相同。

10.运行项目,删除其他入口(个人洁癖)


步骤一
步骤二(代表运行成功)

11.增加一个基础接口,在入口子项目添加一个接口


步骤一
@RestController
public class Main1 {

    @RequestMapping(value = "/")
    public String _Start() {
        return "项目已成功运行";
    }
}

12.添加端口(端口是在入口项目添加)


步骤一

13.启动(端口被占用了改到了8001就不重新截图了)


步骤一

14.这一步、基础搭建就已经完成了

项目打包

1.为了保证项目能够正常打包,请按照基础搭建一步一步来。(网上很多文章搭建不一样,最终很少有能一次成功就打包的,所以避免踩坑)

2.依次完成搭建后,项目右侧maven


步骤一(运行package)

3.一堆测试后、项目成功打包


步骤一

4.因为module1是入口,所以jar包在module1子目录下


步骤一

5.cmd命令运行

打包成功运行

6.打包测试这里就结束了

项目拆分

1.既然是多人聚合项目(这里先不谈mvc这些关联模式),解耦性是非常高的,每一个子项目就是一个系统,比如登录系统,数据库管理系统等等,基本就是跟微服务大体一致。

2.既然没有很高的耦合性,那么这些module就是独立的jar包,以module2作为实列

3.在module2中新建一个接口

步骤一

4.运行项目,发现访问http://localhost:8001/module并不能获取结果。

5.返回module1(入口项目)的启动模块中,替换@SpringBootApplication,将依赖模块也加入托管容器

@SpringBootApplication(scanBasePackages = "com.example")

6.再次运行项目,可以进行正常访问


image.png

7.既然要进行项目拆分,那么我们必然会对module2进行打包,进入module2的pom文件。

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--此处修改-->
<!--                <configuration>-->
<!--                    <classifier>exec</classifier>-->     
<!--                </configuration>-->
            </plugin>
        </plugins>
    </build>

8.将build恢复原状,这时候我们在使用maven进行打包


步骤一 步骤二

9.这里不再演示,(上述步骤记得在module2中配置新端口),该module2如果是但是系统模块,是非常方便单独拆分的,已经直接作为上线项目也可以直接引用到下一个项目(比如工具模块)

10.项目拆分也到此结束

单人项目,设计模式MVC

1.既然是单人项目(当然这里也可以不是),将项目拆分成server、dao、controller是不可避免的。

2.基础搭建上注释了依赖关系,这里重新讲解一下controller连接server,则server是依赖对象。dao被server所依赖。

3.修改基础搭建中的依赖关系(不做演示)

4.每个模块中写好逻辑(dao层处理数据库,server处理数据库逻辑,已经下发的数据等,controller处理下发)

5.跟一个项目一样@Autowired注入,注意: 每个启动入口都要添加依赖的名称,不然@Autowired注入是找不到的

//演示
@SpringBootApplication(scanBasePackages = "com.example")

6.正常逻辑写项目(这里已经不能被拆分了,但是可以部分逻辑可以抽离用于下一个项目)

7.打包、上线、部署

结尾

相关文章

网友评论

      本文标题:Spring boot 多模块项目搭建、打包、拆分

      本文链接:https://www.haomeiwen.com/subject/asyngktx.html