使用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)早已滿(mǎn)足不了我們的要求。比如設(shè)計(jì)一個(gè)互聯(lián)網(wǎng)電商微服務(wù)架構(gòu)系統(tǒng)象颖,往往會(huì)被拆分成多個(gè)微服務(wù)子系統(tǒng)佩厚,如前端、支付力麸、物流可款、訂單和庫(kù)存,各個(gè)子系統(tǒng)獨(dú)立部署克蚂,通過(guò)http調(diào)用闺鲸,減少耦合。
本文將探索如何使用IntelliJ IDEA基于Maven創(chuàng)建多模塊項(xiàng)目埃叭。本項(xiàng)目也是后續(xù)SpringBoot如何快速集成第三方技術(shù)系列文章的開(kāi)端項(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)一管理他們,下面就來(lái)創(chuàng)建一個(gè)parent項(xiàng)目涩僻。
選擇新建的項(xiàng)目類(lèi)型為Spring Initializr缭召,快速創(chuàng)建Springboot項(xiàng)目。


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

根據(jù)實(shí)際要求逆日,設(shè)置項(xiàng)目屬性嵌巷。后面Next直接使用默認(rèn)選項(xiàng),關(guān)于導(dǎo)入其他依賴(lài)包室抽,我們手動(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)目說(shuō)明:這里作為聚合工程的父工程兽泄,修改打包為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>

    <!-- 繼承說(shuō)明:這里繼承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>


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


    <!--依賴(lài)說(shuō)明:公共的maven庫(kù)在這里添加,每個(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)目栅屏,所以修改原來(lái)的打包方式為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)目名稱(chēng)(對(duì)照上圖)在選擇File>>new>>Module缔莲,因?yàn)樗械膎ew都是相對(duì)你選中的目錄來(lái)的。


new module.png
module springbootswagger.png

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


directory.png

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

接下來(lái)厌秒,首先建立相互關(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包依賴(lài)檐晕,也可依賴(lài)公共服務(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)目中的依賴(lài),所以可以刪除子模塊中定義 -->
        <!--
        <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>
        -->
        <!--依賴(lài)公共服務(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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凰萨,一起剝皮案震驚了整個(gè)濱河市继控,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沟蔑,老刑警劉巖湿诊,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瘦材,居然都是意外死亡厅须,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)食棕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)朗和,“玉大人,你說(shuō)我怎么就攤上這事簿晓】衾” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵憔儿,是天一觀的道長(zhǎng)忆植。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么朝刊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任耀里,我火速辦了婚禮,結(jié)果婚禮上拾氓,老公的妹妹穿的比我還像新娘冯挎。我一直安慰自己,他們只是感情好咙鞍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布房官。 她就那樣靜靜地躺著,像睡著了一般续滋。 火紅的嫁衣襯著肌膚如雪翰守。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天吃粒,我揣著相機(jī)與錄音潦俺,去河邊找鬼。 笑死徐勃,一個(gè)胖子當(dāng)著我的面吹牛事示,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播僻肖,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肖爵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了臀脏?” 一聲冷哼從身側(cè)響起劝堪,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揉稚,沒(méi)想到半個(gè)月后秒啦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搀玖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年余境,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灌诅。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芳来,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猜拾,到底是詐尸還是另有隱情即舌,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布挎袜,位于F島的核電站顽聂,受9級(jí)特大地震影響肥惭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芜飘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一务豺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗦明,春花似錦、人聲如沸蚪燕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馆纳。三九已至诗良,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鲁驶,已是汗流浹背鉴裹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钥弯,地道東北人径荔。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像脆霎,于是被迫代替她去往敵國(guó)和親总处。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容