idea建立springboot多模組專案
最近在負責的是一個比較複雜專案,模組很多,程式碼中的二級模組就有9個,部分二級模組下面還分了多個模組。程式碼中的多模組是用maven管理的,每個模組都使用spring boot框架。之前有零零散散學過一些maven多模組配置的知識,但沒自己從頭到尾建立和配置過,也快忘得差不多了。這次正好對照著這個專案,動手實踐一下,下面我們就開始吧。
maven多模組專案通常由一個父模組和若干個子模組構成,每個模組都對應著一個pom.xml。它們之間通過繼承和聚合(也稱作多模組)相互關聯。多模組適用於一些比較大的專案,通過合理的模組拆分,實現程式碼的複用,便於維護和管理。
1 多模組專案建立
因為本系列的下一篇是《Spring Boot整合Dubbo》,所以本章就以建立多模組的dubbo專案作為示例。示例中的開發環境是Win 7,編輯器是Intellij IDEA,Java版本是1.8。
1.1 父模組建立
首先我們在IDEA中建立一個spring boot工程作為父專案。
一、在介面左上角選擇File->New->Project後,選擇Spring Initializr,預設使用的Java版本是1.8。
二、點選Next,進入下一步,可以設定專案的一些基本資訊。
這裡我們先來溫習下groupId、artifactId、package這三個引數的一般填寫規範。
groupId和artifactId統稱為“座標”,是為了保證專案唯一性而提出的。groupId是專案組織唯一的識別符號,實際對應JAVA的包的結構,ArtifactID是專案的唯一的識別符號,實際對應專案的名稱,就是專案根目錄的名稱。groupId一般分為多個段,一般第一段為域,第二段為公司名稱。舉個apache公司的tomcat專案例子:這個專案的groupId是org.apache,它的域是org,公司名稱是apache,artifactId是tomcat。包結構package最好是以groupId.artifactId打頭的。
因為後續打算將“程式碼學習和實踐”寫成一個系列的文章,文中演示的工程都作為該工程的子模組,所以這裡專案名Name就填寫CodeLearnAndPractice。
這裡是個人練習的專案,不涉及公司名,但groupId、artifactId、package引數的填寫,還是儘量按照上面的規範來填寫,這裡package就直接用groupId.artifactId。如下所示:
三、點選Next,進入下一個選擇dependency的介面,作用是在pom中自動新增一些依賴,在專案開始時就下載。這裡我們暫時不勾選任何依賴。
四、點選Next,進入下一個介面,填寫工程名,並選擇工程所在目錄。填寫完成後,點選Finish,即可建立一個spring boot專案。
1.2 建立子模組
在上面建立好的CodeLearnAndPractice工程名上,點選右鍵,選擇New–>Module,進入New Module頁面。
該模組為dubbo服務的提供方,Name為springboot-dubbo-server,後面其他的引數都可參照父模組的引數設定。
下面建立另一個Module,dubbo服務的呼叫方,Name為springboot-dubbo-client,其他引數設定參照上步。
以上3個模組建立完成之後,整個專案的目錄結構如下圖所示。
我們把下圖選中的無用的檔案及資料夾刪掉,包括三個模組的mvnw、mvnw.cmd檔案及.mvn資料夾,還有父模組的src目錄,因為此處的父模組只做依賴管理,不需要編寫程式碼。
到這裡,一個父模組和兩個子模組都建立完成啦~~
2 多模組專案配置
2.1 父模組pom配置
父pom是為了抽取統一的配置資訊和依賴版本控制,方便子pom直接引用,簡化子pom的配置。
下面介紹下父pom的配置中需要注意的一些地方。我貼出的pom看起來會有點冗餘,因為其中一些不需要的地方,我沒有直接刪掉而是註釋掉,並加了說明,是為了後續檢視的時候還能清楚刪掉的原因。
1、父模組的打包型別
多模組專案中,父模組打包型別必須是pom,同時以給出所有的子模組,其中每個module,都是另外一個maven專案。
我們的專案中目前一共有兩個子模組,springboot-dubbo-server和springboot-dubbo-client。後續新增的子模組也必須加到父pom的modules中。
2、繼承設定
繼承是maven中很強大的一種功能,繼承可以使子pom獲得parent中的各項配置,對子pom進行統一的配置和依賴管理。父pom中的大多數元素都能被子pom繼承,想深入瞭解的同學可自行搜尋學習~~
maven專案之間的繼承關係通過表示。這裡使用的開發框架是spring boot,預設繼承spring-boot-starter-parent。
3、使用dependencyManagement管理依賴版本號
一般在專案最頂層的父pom中使用該元素,讓所有子模組引用一個依賴而不用顯式的列出版本號。maven會沿著父子層次向上走,直到找到一個擁有dependencyManagement元素的專案,然後它就會使用在這個dependencyManagement元素中指定的版本號。
4、使用properties控制依賴包的版本號,便於版本維護
在properties標籤中,新增各依賴包的版本號,然後在dependency中直接引用該依賴版本號的值即可。
CodeLearnAndPractice/pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
|
2.2 子模組pom配置
1、繼承設定
子模組的parent要使用頂層的父模組.
2、依賴設定
父模組pom中使用dependencyManagement來管理的依賴,在子模組pom中就不需要再寫版本號了,exclusion元素也不需要再寫。
springboot-dubbo-server\pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
|
springvoot-dubbo-client/pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
|
3、關於exclusions標籤
當dependency A自身的依賴B,與其他dependency存在衝突的時候(最常見的就是版本衝突),我們就需要把B排除掉,這時就需要使用exclusions元素。
那麼我們怎麼知道一個dependency自身包含哪些依賴呢?
1、通過mvn dependency:tree命令檢視依賴樹
2、使用IDEA或其他IDA檢視依賴樹
點選IDEA右側的Maven Projects,在每個模組的Dependencies中即可檢視每個dependency內部的依賴及版本號,從來識別哪些依賴需要被排除掉。
以dubbo為例,我們先刪除配置,點開Maven Projects,可以看到2.5.3版本的dubbo中使用的spring版本是2.5.6,這是一個很老的版本,有一些方法是沒有的,現在在用的spring版本一般都是4.*的,所以我們需要把它排除掉,避免後續報錯。
要檢視當前專案中使用的spring版本,可以按住左鍵,然後點選父pom中的值,進入更上一層pom,再重複上步操作,可以看到spring的版本是4.3.12。
按住左鍵,然後點選父pom中的值,進入更上一層pom:
可以看到spring的版本是4.3.12:
3 測試
這裡就先不寫程式碼了,到下一章再寫。直接編譯一下,如果編譯成功,說明pom檔案的配置沒有什麼大問題。
點開右側Maven Projects,雙擊父模組Lifecycle中的compile,進行程式碼編譯,或者直接在Terminal中執行命令:mvn compile。
編譯通過啦~~
到這裡,Spring Boot多模組專案建立與配置就介紹完啦