使用IDEA搭建和部署SpringBoot多模塊項(xiàng)目(Multi-Module)

1. 引言

傳統(tǒng)的web應(yīng)用,我們通常采用單一項(xiàng)目工程結(jié)構(gòu)。而到了分布式架構(gòu)系統(tǒng)中,尤其是微服務(wù)概念盛行的今天,這種項(xiàng)目結(jié)構(gòu)早已滿足不了我們的要求。比如設(shè)計(jì)一個(gè)互聯(lián)網(wǎng)電商微服務(wù)架構(gòu)系統(tǒng),往往會(huì)被拆分成多個(gè)微服務(wù)子系統(tǒng),如前端、支付、物流、訂單和庫存,各個(gè)子系統(tǒng)獨(dú)立部署,通過http調(diào)用,減少耦合。
本文將探索如何使用IntelliJ IDEA基于Maven創(chuàng)建多模塊項(xiàng)目。本項(xiàng)目也是后續(xù)SpringBoot如何快速集成第三方技術(shù)系列文章的開端項(xiàng)目,源碼將發(fā)布于github上,歡迎持續(xù)關(guān)注。

2. 項(xiàng)目結(jié)構(gòu)

這次我們搭建的多模塊項(xiàng)目主要包含

  • springboot-commen?? 公共服務(wù)模塊
  • springboot-swagger? Springboot集成Swagger技術(shù)模塊
  • springboot-mybatis ? Springboot集成Mybatis技術(shù)模塊
    公共服務(wù)組件主要存放一些通用的服務(wù)組件,后續(xù)其它第三方技術(shù)系列文章的工程也將在該項(xiàng)目中以新增模塊發(fā)布。

3. 搭建部署步驟

3.1 創(chuàng)建聚合工程parent

對(duì)于這些模塊,我們需要聚合parent maven項(xiàng)目,統(tǒng)一管理他們,下面就來創(chuàng)建一個(gè)parent項(xiàng)目。
選擇新建的項(xiàng)目類型為Spring Initializr,快速創(chuàng)建Springboot項(xiàng)目。


選擇initial項(xiàng)目類型.png

根據(jù)實(shí)際要求,設(shè)置項(xiàng)目屬性。后面Next直接使用默認(rèn)選項(xiàng),關(guān)于導(dǎo)入其他依賴包,我們手動(dòng)導(dǎo)入。


設(shè)置工程屬性.png

由于springboot-tech為聚合管理工程,并不需要src目錄,可以直接刪除,然后修改聚合工程springboot-tech的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>

    <!-- 項(xiàng)目說明:這里作為聚合工程的父工程,修改打包為pom聚合工程 -->
    <groupId>com.qinghaihu</groupId>
    <artifactId>sprinboot-tech</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>sprinboot-tech</name>
    <description>Demo project for Spring Boot Technology</description>

    <!-- 繼承說明:這里繼承SpringBoot提供的父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


    <!-- 版本說明:這里統(tǒng)一管理依賴的版本號(hào),為了各個(gè)子module依賴包的一致性,避免版本不一致導(dǎo)致沖突問題 -->
    <properties>
        <java.version>1.8</java.version>
    </properties>


    <!--依賴說明:公共的maven庫在這里添加,每個(gè)工程獨(dú)有的maven包,在各個(gè)子工程添加,但是版本號(hào)都是在父工程統(tǒng)一配置-->
    <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 注意: 因?yàn)槲覀儾恍枰猻pringboot-tech是一個(gè)可運(yùn)行的項(xiàng)目,所以修改原來的打包方式為maven打包方式 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

parent項(xiàng)目建立完畢,下面在此項(xiàng)目下新建我們需要的模塊,

3.2 添加子模塊項(xiàng)目

這里需要注意一下,如果想要建立對(duì)應(yīng)項(xiàng)目下的module項(xiàng)目,那么鼠標(biāo)先選中該項(xiàng)目名稱(對(duì)照上圖)在選擇File>>new>>Module,因?yàn)樗械膎ew都是相對(duì)你選中的目錄來的。


new module.png
module springbootswagger.png

同樣的方法,新建剩余的其它模塊,新建完成后的目錄結(jié)構(gòu)如下圖。


directory.png

3.3 建立模塊關(guān)系

接下來,首先建立相互關(guān)系,parent項(xiàng)目springboot-tech pom文件中配置子模塊,添加modules標(biāo)簽.

   <modules>
       <module>springboot-common</module>
       <module>springboot-swagger</module>
       <module>springboot-mybatis</module>
   </modules>

修改子模塊pom文件,繼承于父模塊。添加子模塊的其它jar包依賴,也可依賴公共服務(wù)模塊,子模塊個(gè)性化配置。以springboot-swagger子模塊為例:

<?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.5.RELEASE</version>
        <relativePath/>
    </parent>
    -->
    <!--繼承父模塊parent工程-->
    <parent>
        <groupId>com.qinghaihu</groupId>
        <artifactId>sprinboot-tech</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>


    <groupId>com.qinghaihu</groupId>
    <artifactId>springboot-swagger</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-swagger</name>
    <description>Demo project for Spring Boot Swagger</description>

    <properties>
        <!-- maven可以繼承父項(xiàng)目中的參數(shù),所以可以刪除子模塊中定義 -->
        <!--<java.version>1.8</java.version>-->
    </properties>

    <dependencies>


        <!--maven可以繼承父項(xiàng)目中的依賴,所以可以刪除子模塊中定義 -->
        <!--
        <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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        -->
        <!--依賴公共服務(wù)模塊-->
        <dependency>
            <groupId>com.qinghaihu</groupId>
            <artifactId>springboot-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
        </dependency>
    </dependencies>

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

</project>


3.4 打包發(fā)布

在 maven project側(cè)邊欄中,先點(diǎn)擊parent項(xiàng)目的clean,然后點(diǎn)擊package或install進(jìn)行打包或發(fā)布。


package .png

4 項(xiàng)目源碼

https://github.com/zhanglianzhong/sprinboot-tech.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容