在idea中創(chuàng)建多模塊的SpringBoot項(xiàng)目

在idea中創(chuàng)建多模塊的SpringBoot項(xiàng)目

首先,了解下maven項(xiàng)目的三種打包方式:

1.war

打包為war包項(xiàng)目時(shí)耗绿,可以放在tomcat下運(yùn)行

2.jar

打包成jar包就是要使用java -jar xxx.jar方式來(lái)運(yùn)行苹支,最常見(jiàn)的就是SpringBoot項(xiàng)目

3.pom

它只是用來(lái)做依賴(lài)管理,打包成的項(xiàng)目并不能直接運(yùn)行误阻。比如Springboot項(xiàng)目的父依賴(lài)以及再住上的依賴(lài)打包方式就是pom,因?yàn)樗鼈冎蛔鲆蕾?lài)管理。

開(kāi)始創(chuàng)建項(xiàng)目

總共創(chuàng)建三個(gè)module儒洛,分別為lyn4ever-web,lyn4ever-service,lyn4ever-dao狼速。就這樣做一個(gè)最簡(jiǎn)單的框架

1.第一步琅锻,創(chuàng)建父工程

1.1直接創(chuàng)建一個(gè)springboot項(xiàng)目(為了方便,當(dāng)然普通的maven項(xiàng)目也可以向胡,當(dāng)你看懂原理后恼蓬,隨意玩),什么也不需要


這一步只需要選擇對(duì)應(yīng)的版本就可以了僵芹,其他的可選可不選


1.2刪除這個(gè)項(xiàng)目下的src文件夾处硬,因?yàn)槲覀儾⒉粫?huì)在這里寫(xiě)代碼

1.3在pom.xml中添加<packaging>pom</packaging>這一句

2.第二步郁油,在剛才這個(gè)項(xiàng)目的根文件夾上鼠標(biāo)右鍵,new->module->選擇maven項(xiàng)目

  • 一定要在剛才這個(gè)項(xiàng)目的根文件夾上創(chuàng)建,因?yàn)檫@樣它會(huì)自動(dòng)為我們寫(xiě)好依賴(lài)關(guān)系(pom依賴(lài)關(guān)系),不然還要自己寫(xiě).這時(shí)注意選擇它的父依賴(lài),如果沒(méi)有就點(diǎn)擊右邊按紐選擇剛才創(chuàng)建的modulepackage


  • 注意選擇好在磁盤(pán)上的文件夾目錄,默認(rèn)情況下是正確的,直接跳過(guò)就好了.


  • idea自動(dòng)為我們?cè)诟疙?xiàng)目的pom文件中添加了如下一句



    而且,也可以看到,這個(gè)web項(xiàng)目的父依賴(lài)就是剛才創(chuàng)建的modulepackage項(xiàng)目


3.第三步,這個(gè)web的項(xiàng)目就創(chuàng)建好了,我們就將這個(gè)子項(xiàng)目做為項(xiàng)目入口,即寫(xiě)一個(gè)springboot的啟動(dòng)類(lèi),只有這一個(gè)項(xiàng)目要寫(xiě),其他的不用寫(xiě).

package cn.lyn4ever.web.boot;

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

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • 作為web層,我們還要引入springboot-web的依賴(lài)
    <dependency>
        <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

4.創(chuàng)建service子項(xiàng)目

和上一個(gè)一樣,new->module->maven然后寫(xiě)好名字.接著在web項(xiàng)目中添加這個(gè)service的依賴(lài),在web中的pom.xml中添加如下依賴(lài):

    <dependency>
            <groupId>cn.lyn4ever</groupId>
            <artifactId>service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

5.創(chuàng)建dao子項(xiàng)目

同樣,也是創(chuàng)建子maven項(xiàng)目,但是這個(gè)dao層要連接數(shù)據(jù)庫(kù),我們就要引入mybatis和mysql相關(guān)依賴(lài)(由于我們最上一層用的是springboot依賴(lài),所以完全可以引入mybatis依賴(lài))攀痊。

  • 這些相關(guān)依賴(lài)可以引入到modulepackage的pom文件中,也可以引入到子模塊中躬审。我個(gè)人建議引入到子模塊中棘街,因?yàn)樗⒉皇撬械淖幽K通用的,但是還是要使用父工程來(lái)管理這些依賴(lài)承边,怎么辦遭殉?那就使用dependencyManagement,如果不明白這個(gè)做法的原理的小伙伴,請(qǐng)戳dependencies與dependencyManagement的區(qū)別
  • dao模塊中的依賴(lài)
    <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
  • service層要依賴(lài)dao層博助,請(qǐng)?jiān)趕ervice的pom中添加依賴(lài)
    <dependency>
            <groupId>cn.lyn4ever</groupId>
            <artifactId>dao</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  • 在idea右邊的maven管理中可以完全看到它們之間的依賴(lài)關(guān)系


6.工程已經(jīng)創(chuàng)建好了险污,我們就開(kāi)始與代碼進(jìn)行測(cè)試吧。

  • 和我們通常寫(xiě)代碼是一樣的富岳,web,service,dao層蛔糯,請(qǐng)自行補(bǔ)全。(代碼已上傳到gitee窖式,隨時(shí)查看項(xiàng)目源代碼地址

7.進(jìn)行測(cè)試

7.1寫(xiě)好代碼后運(yùn)行Application.main()時(shí)報(bào)錯(cuò)


說(shuō)明@Service沒(méi)有掃描到蚁飒, 所以沒(méi)有這個(gè)bean,在Application.java上添加掃描注解@ComponentScan("cn.lyn4ever")



上邊錯(cuò)就是說(shuō)明掃描到mapper萝喘,加上注解@MapperScan("cn.lyn4ever.dao")

幾個(gè)說(shuō)明:

8.最重要的部分琼懊,打包上線(xiàn)和多人協(xié)作的情況處理

8.1 打包上線(xiàn):

首先,你要明白爬早。我們這么折騰了好一會(huì)兒哼丈,到底做了個(gè)什么?

  • service和dao模塊其實(shí)就是一個(gè)被依賴(lài)的項(xiàng)目凸椿,真正的項(xiàng)目是web這個(gè)模塊削祈。

  • 所以,我們只需要打包web模塊就可以了脑漫,但是web模塊依賴(lài)service,service依賴(lài)dao髓抑。

  • maven中的所謂的依賴(lài),就是要在倉(cāng)庫(kù)中尋找依賴(lài)优幸。所以我們要先將service和dao這兩個(gè)模塊install到本地maven倉(cāng)庫(kù)中(只有這樣吨拍,在打包web模塊時(shí),才能正確找到依賴(lài)网杆,先dao羹饰,再service)。



    如果報(bào)錯(cuò)如下

------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE:repackage (repackage) on project dao: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.2.2.RELEASE:repackage failed: Unable to find main class -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

將父項(xiàng)目中的這段代碼復(fù)制到web模塊中碳却,因?yàn)檫@上sprinboot項(xiàng)目打包的插件队秩。

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

當(dāng)然,為了避免出現(xiàn)不必要的錯(cuò)誤昼浦,我更建議直接對(duì)modulepackage這個(gè)父項(xiàng)目進(jìn)行install
依次對(duì)dao和service執(zhí)行了install后馍资,可以在本地maven倉(cāng)庫(kù)中找到它們:


然后對(duì)web模塊進(jìn)行打包,打包完成后关噪,會(huì)在它的target文件夾下生成jar文件鸟蟹,我們運(yùn)行這上jar文件


java -jar web-0.0.1-SNAPSHOT.jar

然后這個(gè)項(xiàng)目就可以上線(xiàn)了。

8.2多人協(xié)作時(shí)

我們使用壓縮包的方式打開(kāi)上邊這個(gè)打包好的jar包使兔,可以在里邊找到剛才的service和dao打包成的jar包



也就是說(shuō)建钥,在對(duì)we模塊打包時(shí),是將本地倉(cāng)庫(kù)中的maven倉(cāng)庫(kù)中的service和dao的jar包打包了進(jìn)去虐沥,如果是多人協(xié)作的話(huà)熊经,最好創(chuàng)建一個(gè)maven私服,這樣就會(huì)更加方便

  • 總結(jié):
  • 1.在實(shí)際工作中置蜀,肯定不止一個(gè)web,service,dao奈搜。請(qǐng)?jiān)诿麜r(shí)做到見(jiàn)名知義。
  • 2.除了web層盯荤,其他的子模塊最終會(huì)被打包成jar包馋吗,放在web包中,只需要運(yùn)行這一個(gè)jar包就可以了
  • 3.父工程的打包方式一定要是pom,即
    <packaging>pom</packaging>

項(xiàng)目源代碼地址

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布秋秤!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宏粤,一起剝皮案震驚了整個(gè)濱河市脚翘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绍哎,老刑警劉巖来农,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異崇堰,居然都是意外死亡沃于,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)海诲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)繁莹,“玉大人,你說(shuō)我怎么就攤上這事特幔∽裳荩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵蚯斯,是天一觀(guān)的道長(zhǎng)薄风。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拍嵌,這世上最難降的妖魔是什么遭赂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮横辆,結(jié)果婚禮上嵌牺,老公的妹妹穿的比我還像新娘。我一直安慰自己龄糊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布募疮。 她就那樣靜靜地躺著炫惩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阿浓。 梳的紋絲不亂的頭發(fā)上他嚷,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音芭毙,去河邊找鬼筋蓖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛退敦,可吹牛的內(nèi)容都是我干的粘咖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侈百,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓮下!你這毒婦竟也來(lái)了翰铡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤讽坏,失蹤者是張志新(化名)和其女友劉穎锭魔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體路呜,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迷捧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胀葱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漠秋。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖巡社,靈堂內(nèi)的尸體忽然破棺而出膛堤,到底是詐尸還是另有隱情,我是刑警寧澤晌该,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布肥荔,位于F島的核電站,受9級(jí)特大地震影響朝群,放射性物質(zhì)發(fā)生泄漏燕耿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一姜胖、第九天 我趴在偏房一處隱蔽的房頂上張望誉帅。 院中可真熱鬧,春花似錦右莱、人聲如沸蚜锨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亚再。三九已至,卻和暖如春晨抡,著一層夾襖步出監(jiān)牢的瞬間氛悬,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工耘柱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留如捅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓调煎,卻偏偏與公主長(zhǎng)得像镜遣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子士袄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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

  • Maven最佳實(shí)踐:劃分模塊 所有用Maven管理的真實(shí)的項(xiàng)目都應(yīng)該是分模塊的烈涮,每個(gè)模塊都對(duì)應(yīng)著一個(gè)pom.xml...
    我不是T先生閱讀 2,745評(píng)論 0 4
  • Maven的基本了解 什么是Maven朴肺? Maven就是Apache下的一個(gè)開(kāi)源項(xiàng)目。它是用純java開(kāi)發(fā)的坚洽。是一...
    Bcome閱讀 2,831評(píng)論 0 7
  • 引言 很多公司里的web項(xiàng)目是都是用maven管理戈稿,maven可以非常方便的管理項(xiàng)目的各種依賴(lài),確實(shí)很好用讶舰,但是對(duì)...
    燃燒杯閱讀 855評(píng)論 1 2
  • 逅弈 轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處鞍盗,謝謝! 以前的日子 以前我們寫(xiě)代碼時(shí)跳昼,jar包都默認(rèn)放在一個(gè)叫 /lib 的目錄下般甲,然后...
    逅弈閱讀 2,891評(píng)論 3 45
  • 文章大綱 一、maven功能介紹二鹅颊、maven整合javaweb案例三敷存、私服應(yīng)用(了解)四、總結(jié)五堪伍、相關(guān)資料下載六...
    故事愛(ài)人c閱讀 583評(píng)論 0 1