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