前言
步驟過于詳細(xì),多圖慎入?。?!
假設(shè)一個(gè)場景,要開發(fā)一個(gè)4s店維修部的辦公系統(tǒng),其功能有:前臺(tái)接待,維修搶單,財(cái)務(wù)結(jié)算,庫存管理。于是我們創(chuàng)建一個(gè)項(xiàng)目balabalabala寫完交工。
一段時(shí)間后,客戶提出,庫存管理出現(xiàn)了重大調(diào)整。于是我們二次開發(fā),寫好之后,告知客戶:“系統(tǒng)更新,所有部門暫停使用15分鐘、、、”。于是,客戶排隊(duì),維修停工,結(jié)算暫停、、、店內(nèi)一片慌亂。
又一段時(shí)間后,客戶提出,財(cái)務(wù)結(jié)算需要修改。于是我們再次開發(fā),寫好之后,告知客戶:“系統(tǒng)更新,所有部門暫停使用15分鐘、、、”。于是,客戶排隊(duì),維修停工,倉庫休息、、、店內(nèi)一片慌亂。
雙一段時(shí)間后,客戶提出、、、
叒一段時(shí)間后,客戶開始抱怨:“我只是調(diào)整某一個(gè)部門的業(yè)務(wù),你們能不能不要把整個(gè)系統(tǒng)停掉,這樣損失太大了、、、”
于是你對每個(gè)功能做一個(gè)系統(tǒng),接待系統(tǒng),維修系統(tǒng),財(cái)務(wù)系統(tǒng),庫存系統(tǒng)。四個(gè)系統(tǒng)應(yīng)運(yùn)而生;
叕一段時(shí)間后,客戶提出,你看登錄后這個(gè)位置啊,把我的名字寫到公司名字下面,還要把十幾個(gè)股東的資料展示出來,還有、、、
于是你帶著需求回去面對四個(gè)系統(tǒng)的相同功能修改、、、卒!
采用分模塊的方式構(gòu)建項(xiàng)目就是將上例中用到的兩種方式結(jié)合在一起,簡而言之就是將一個(gè)大的項(xiàng)目拆分成小的模塊,各功能之間互不干擾又可實(shí)現(xiàn)共用基礎(chǔ)參數(shù);
構(gòu)建
以上述需求為例,我們在拆分之時(shí),根據(jù)需求,將其分成
-
父模塊
erp-common
erp-service
erp-service-impl
erp-web-reception
erp-web-finance
erp-web-fix
erp-web-repertory
創(chuàng)建父模塊
構(gòu)建分模塊項(xiàng)目的時(shí)候首先需要?jiǎng)?chuàng)建一個(gè)父級(jí)的模塊,所有的子模塊均繼承自父模塊。因?yàn)槲覀冋w架構(gòu)采用SpringBoot構(gòu)建,所以父模塊要?jiǎng)?chuàng)建為SpringBoot項(xiàng)目
- 選擇Spring Initializr --> Next
-
填寫項(xiàng)目名稱,選擇JDK版本,其他無需修改 --> Next
Group: 一般為公司域名倒置
Artifact: 項(xiàng)目名
- 選擇SpringBoot版本,其他無需勾選 --> Next
- 填寫項(xiàng)目名、項(xiàng)目地址 --> Finish
- 創(chuàng)建之后,項(xiàng)目結(jié)構(gòu)如下,刪除如下選中部分文件
- 至此,父模塊創(chuàng)建完成,此時(shí)的pom文件如下,此pom即是下文所說的父pom文件
創(chuàng)建 erp-common
erp-common模塊我們約定只存放實(shí)體類,工具類,常量類、異常類等一些共用且不需要交由Spring管理的類,因此創(chuàng)建的時(shí)候不需要它是一個(gè)SpringBoot項(xiàng)目,只需要?jiǎng)?chuàng)建為傳統(tǒng)的Maven項(xiàng)目即可;
- 選中我們的項(xiàng)目名Wayne-ERP,右鍵New --> Module
- 選擇Maven,以表示我們創(chuàng)建的是一個(gè)Maven項(xiàng)目 --> Next
- 此處填寫的artifactId就是我們的模塊名,創(chuàng)建該模塊時(shí),如果第一步選中了父模塊,那么此處GroupId和Version都會(huì)自動(dòng)填充,如果沒有自動(dòng)填充,說明創(chuàng)建該模塊的時(shí)候沒有選中Wayne-ERP --> Next
- 該模塊的名稱以及該模塊存放的位置,我一般在自動(dòng)生成的名稱中間加個(gè)
-就拿來直接使用了 --> Finish
- 最下面的pom.xml即是父pom,父pom內(nèi)容如下,增加了一個(gè)module子模塊
- erp-common的pom文件如下,其中圈起部分為自己添加內(nèi)容,relativePath 指向父pom位置
- 至此,erp-common模塊創(chuàng)建完成,此時(shí)項(xiàng)目結(jié)構(gòu)如下,
創(chuàng)建 erp-service
erp-service模塊我們約定只存放service接口,因此也不需要交由Spring去管理,所以我們也將其創(chuàng)建為傳統(tǒng)的Maven項(xiàng)目,創(chuàng)建方式與erp-common相同,此處不再贅述,如有不知道怎么操作的同學(xué)可私聊我或者發(fā)郵件給我
- 創(chuàng)建完成之后,此時(shí)父pom內(nèi)容如下
- erp-service的pom文件如下
創(chuàng)建erp-service-impl
erp-service-impl我們約定存放service實(shí)現(xiàn)類,即業(yè)務(wù)層代碼,在Controller中需要用到自動(dòng)注入,因此需要交由Spring管理,所以我們將其創(chuàng)建為SpringBoot項(xiàng)目。在創(chuàng)建Maven的子模塊與創(chuàng)建SpringBoot的子模塊有些差別,下面列出詳細(xì)步驟;
-
選中項(xiàng)目名Wayne-ERP,右鍵New --> Module,在彈出的頁面中選擇Spring Initializr --> Next
image 此處Group需要手動(dòng)填寫,填好之后 --> Next
- 選擇SpringBoot版本,與創(chuàng)建父模塊時(shí)選擇版本要保持一致
點(diǎn)擊Next --> Finish
創(chuàng)建完成之后,需要在父pom中手動(dòng)添加erp-service-impl子模塊,并刪除dependencies中的依賴
- 將erp-service-impl的pom文件中parent標(biāo)簽,手動(dòng)替換為如下格式
- 此時(shí)項(xiàng)目結(jié)構(gòu)如下,刪除如下選中部分文件,因?yàn)槲覀兂绦虻膯?dòng)入口在erp-web-*,所以在erp-service-impl中不需要main方法(
SpringBoot是以Main方法啟動(dòng)的)
- 至此,erp-service-impl模塊創(chuàng)建完成,整體項(xiàng)目結(jié)構(gòu)如下
創(chuàng)建erp-web-repertory
此模塊即是我們倉庫管理系統(tǒng)的打包入口,啟動(dòng)入口,存放與倉管相關(guān)接口和頁面
- 創(chuàng)建方式與erp-service-impl相似,此處需要修改Package內(nèi)容,此處包名表示SpringBoot自動(dòng)生成的main方法所在的位置,因?yàn)镾pringBoot基于main方法啟動(dòng)時(shí),默認(rèn)會(huì)自動(dòng)掃描本包及本包下所有子包的內(nèi)容,所以我們將main方法向外提一層;
- 此處表示SpringBoot創(chuàng)建好之后,自動(dòng)添加的依賴,我們只選擇Web即可,表明這是一個(gè)Web項(xiàng)目,后續(xù)需要用到第三方框架,我們再自行整合;
- 其余步驟與erp-service-impl相似,只是不需要?jiǎng)h除自動(dòng)生成的文件,此時(shí)項(xiàng)目接口如下:
創(chuàng)建其余web模塊
此時(shí)我們還剩erp-web-reception、erp-web-finance、erp-web-fix沒有創(chuàng)建,這三個(gè)模塊與erp-web-repertory創(chuàng)建方式相同,此處就不再贅述,只需注意命名問題即可;
完整項(xiàng)目結(jié)構(gòu):
依賴
各個(gè)模塊已經(jīng)創(chuàng)建完成,還剩下的就是各個(gè)模塊之間的依賴關(guān)系了,各模塊之間應(yīng)該怎么依賴呢?具體的哪個(gè)包又應(yīng)該放在哪個(gè)模塊下面的?我整理一張圖片供大家參考:
pom文件如下:
web模塊pom基本相似,都只引入erp-service-impl即可,在此只列舉一個(gè)
運(yùn)行
每個(gè)web模塊對應(yīng)一個(gè)main方法,啟動(dòng)時(shí)找到各自的main方法,點(diǎn)擊啟動(dòng)即可,idea一般會(huì)自動(dòng)檢測SpringBoot程序入口,想跑哪個(gè)點(diǎn)哪個(gè)~~
擴(kuò)展
另一種模塊結(jié)構(gòu),感興趣的可以發(fā)郵件與我;占位符
常規(guī)占位 (¬_¬)…