Springboot 2.x 构建多模块项目

公司一站通项目 由于使用springboot 开发后端业务,涉及的模块比较多。 大模块(需要独立打包部署的)分为 Web, Websocket , Task 模块。。 而这三个模块,又有一些公共业务,包括都需要使用到 数据库mysql 操作, rabbitmq操作,等等一系列相同业务Service.. 如果使用一个springboot 开发,那么不利于业务解耦,, 重新修改某一块的业务的时候,需要启动所有的模块。从而影响到其他业务,这样不利于业务的开发。。

本次搭建使用 idea开发环境。案例将以打包web模块为例, (websocket模块和task模块原理相同) 模块分层如图:


image.png

创建项目流程:

  1. (1).通过idea 创建一个空的 maven项目做为springboot顶级父项目,由于父项目不做任何代码编写,可以删除src目录。仅仅保留 pom.xml 文件和一些 idea的索引文件.
    (2). 修改pom.xml, 案例再下面

  2. 在idea中创建子模块流程


    image.png

    image.png

    依次类推 创建 所有的子模块 最终idea如图:


    image.png

3.1 修改顶级父 的pom文件 如图:



    4.0.0

    com.us764
    us764-boot
    1.0.0 
    pom

    us764-boot
    一站通主boot项目

    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.1.RELEASE
         
    

    
    
        us764boot-core 
        us764boot-data 
        us764boot-common 
        us764boot-opex 
        us764boot-task 
        us764boot-web 
        us764boot-websocket 
        us764boot-mq
    

    
        UTF-8
        UTF-8
        1.8
        true
        1.0.0

        1.0.0
        1.0.0
        1.0.0
        1.0.0
        1.0.0
        1.0.0
        1.0.0
        1.0.0

        1.2.0
        3.3.2
        1.1.23
        1.7.18
        1.5.0
        1.7.2
        1.2.73
        3.11
        4.4
        3.10.3
        1.15
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.projectlombok
            lombok
            true
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.1
                
                    ${java.version}
                    ${java.version}
                
            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.22.2
                
                    true    
                
            
        
    



3.2 修改不需要启动的模块(不需要单独打包的模块) 的pom文件,本文将以 us764boot-common 的 pom文件为例



    4.0.0

    
        com.us764
        us764-boot
        1.0.0
        ../pom.xml
    

    us764boot-common
    us764boot-common
    ${us764boot-common.version}
    公共核心模块
    jar

    
        
            org.lionsoul
            ip2region
            ${ip2region.version}
        

        
            org.apache.commons
            commons-lang3
            ${commons-lang3.version}
        
        
            com.us764
            us764boot-core
            ${us764boot-core.version}
        

        
            com.auth0
            java-jwt
            ${java-jwt.version}
        

        
            com.samskivert
            jmustache
            ${jmustache.version}
        

        
            org.springframework.boot
            spring-boot-starter-mail
        

        
            org.apache.commons
            commons-collections4
            ${commons-collections4.version}
        


    

    



3.3 修改 需要打包的模块 pom 文件,本案例以 web模块 (websocket模块和task模块一样) 为例



    4.0.0
    
        com.us764
        us764-boot
        1.0.0
        ../pom.xml
    

    us764boot-web
    1.0.0
    us764boot-web
    项目对外api模块
    jar

    

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springdoc
            springdoc-openapi-ui
            ${springdoc-openapi-ui.version}
            
                
                    org.apache.commons
                    commons-lang3
                
            
        

        
            com.us764
            us764boot-data
            ${us764boot-data.version}
        

        
            com.us764
            us764boot-common
            ${us764boot-common.version}
        

        
            com.us764
            us764boot-core
            ${us764boot-core.version}
        

        
            com.us764
            us764boot-opex
            ${us764boot-opex.version}
        

        
            com.us764
            us764boot-mq
            ${us764boot-mq.version}
        

    

    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                    exec
                
                
                    
                        
                            repackage
                        
                    
                
            
        


        
            
                src/main/resources
                
            
        

    



3.4 由于web模块需要依赖 其他5个小模块,故需要配置web模块的包扫描, 修改web模块的入口启动类文件。配置包扫描

package com.us764.us764bootweb;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.Banner;

@SpringBootApplication(scanBasePackages = {
    "com.us764.us764bootcommon",
    "com.us764.us764bootcore",
    "com.us764.us764bootdata",
    "com.us764.us764bootmq",
    "com.us764.us764bootopex"
}) // 这里需要配置包引入扫描,需要引入哪些模块,就需要填写那些模块的包路径。 也可以缩写成 scanBasePackages="com.us764" 包含所有的子模块
// 但是由于 本例的websocket和task模块, 不在web模块内。故一个个加载
public class Us764bootWebApplication {

    public static void main(String[] args) {
      
        SpringApplication app = new SpringApplication(Us764bootWebApplication.class);
        app.setBannerMode(Banner.Mode.OFF);
        //app.setWebApplicationType(WebApplicationType.NONE);
        app.run(args);
    }

}

  1. 删除 公共业务模块 作为web模块依赖的,无需打包模块的启动类文件。 本项目,则删除 us764boot-common, us764boot-core,us764boot-mq,us764boot-opex 等模块的启动类文件。。。由于 us764boot-data模块虽然也不需要单独启动,但是由于它引入了spring-boot-starter-data-mongodb 操作mongodb 故而不能删除启动类。 我也没找到原因

5.在 父亲级项目下执行 mvn clean install 即可打包所有的子项目依赖jar , 然后在 web模块的根目录 执行 mvn package , 则可完成web模块的打包。。。打包后会将 所有需要依赖模块 (common,data,core等子jar 集成到web模块的 jar文件类)


image.png

打开 us764boot-web-1.0.0-exec.jar 内的 BOOT-INFO/lib 文件夹内可看到 其他模块的依赖jar


image.png

项目构建源码的下载地址: https://gitee.com/huaiyuanwangjun/springboot/raw/master/us764-boot.zip

你可能感兴趣的:(Springboot 2.x 构建多模块项目)