Springboot整合dubbo構建maven多模組專案(一)- 專案建立和pom.xml中jar包配置
以前一直用Spring作為容器構建專案,但是看到Spring官網一直在推Springboot,最重要的是Springboot確實避免自己尋找多個jar包(大多數情況下,可能自己都不記得該引入哪些jar包)和jar包之間衝突的問題,同時省掉了在整合其他框架時候,配置檔案的配置,大大節省建立專案的過程,同時減少專案的程式碼量。自己目前認為的好處吧!不過專案搭建確實是一直以來一個比較頭疼的問題,Springboot的誕生,感覺世界瞬間美好了,哈哈~~
網上看了一些文章,由於離Springboot的學習有一個月的時間,專案中也沒有應用,感覺有點生疏,蒸騰了一天,也沒把Springboot整合dubbo構建maven多模組專案給整明白,各種報錯,無從下手!真的都在懷疑,這些寫文章的人到底是不是自己親自動手實踐了,才轉發的文章,還是直接就為了寫文章而寫文章,直接就轉了,自己也只是知道個大概?可能也是當天運氣比較差,不太適合研究新東西,嘿嘿~~
以下內容是自己親自動手實踐可以跑的起來的專案,有需要的朋友可以直接參考,如果軟體環境(IntelliJ IDEA、Springboot、dubbo等)發生了改變,個人不保證5-6年之後還能正常跑,哈哈!
1 多模組專案建立
因為本系列的下一篇是《Spring Boot整合Dubbo》,所以本章就以建立多模組的dubbo專案作為示例。示例中的開發環境是Win 7,編輯器是Intellij IDEA,Java版本是1.8。
1.1 父模組建立
首先我們在IDEA中建立一個spring boot工程作為父專案。
一、在介面左上角選擇File->New->Project後,選擇Spring Initializr(不要選擇maven,maven執行不起來,報各種錯誤
二、點選Next,進入下一步,可以設定專案的一些基本資訊。
這裡我們先來溫習下groupId、artifactId、package這三個引數的一般填寫規範。
groupId和artifactId統稱為“座標”,是為了保證專案唯一性而提出的。groupId是專案組織唯一的識別符號,實際對應JAVA的包的結構,ArtifactID是專案的唯一的識別符號,實際對應專案的名稱,就是專案根目錄的名稱。groupId一般分為多個段,一般第一段為域,第二段為公司名稱。舉個apache公司的tomcat專案例子:這個專案的groupId是org.apache,它的域是org,公司名稱是apache,artifactId是tomcat。包結構package最好是以groupId.artifactId打頭的。
這是練習,為了省事,就沒有直接按照標準來,直接默認了,但還是儘量按照上面的規範來填寫。如下所示:
三、點選Next,進入下一個選擇dependency的介面,作用是在pom中自動新增一些依賴,在專案開始時就下載。這裡我們暫時不勾選任何依賴。
四、點選Next,進入下一個介面,填寫工程名,並選擇工程所在目錄。填寫完成後,點選Finish,即可建立一個spring boot專案。
1.2 建立子模組
在上面建立好的springboot-dubbo-parent工程名上,點選右鍵,選擇New–>Module,進入New Module頁面。
該模組為dubbo服務的提供方,實現springboot-dubbo-api中定義的介面,Name為springboot-dubbo-server,後面其他的引數都可參照父模組的引數設定。
下面建立另一個Module,dubbo服務的呼叫方,Name為springboot-dubbo-client,其他引數設定參照上步。
以上3個模組建立完成之後,整個專案的目錄結構如下圖所示。
我們可以刪掉父模組的src目錄,因為此處的父模組只做依賴管理,不需要編寫程式碼。
到這裡,一個父模組和兩個子模組都建立完成啦~~
2 多模組專案配置
2.1 父模組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中直接引用該依賴版本號的值即可。
springboot-dubbo-parent/pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>springboot-dubbo-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>springboot-dubbo-parent</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <modules> <module>springboot-dubbo-server</module> <module>springboot-dubbo-client</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!-- 在properties中統一控制依賴包的版本,更清晰--> <dubbo.version>2.5.3</dubbo.version> <zk.version>3.4.5</zk.version> <zkclient.version>0.1</zkclient.version> </properties> <dependencyManagement> <!--dependencyManagement用於管理依賴版本號--> <dependencies> <!--刪除spring-boot-starter和spring-boot-starter-test,--> <!--因為parent中繼承的祖先中已經有了,並且一般dependencyManagement管理的依賴都要寫版本號--> <!--<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> </dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.9.RELEASE</version> </dependency> <!--新增後續dubbo專案中所需依賴,dubbo、zk--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version><!--使用properties中配置的版本號--> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zk.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>${zkclient.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.2 子模組pom配置
1、繼承設定
子模組的parent要使用頂層的父模組.
2、依賴設定
父模組pom中使用dependencyManagement來管理的依賴,在子模組pom中就不需要再寫版本號了,exclusion元素也不需要再寫。
springboot-dubbo-server\pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>springboot-dubbo-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springboot-dubbo-server</name> <description>Demo project for Spring Boot</description> <parent> <groupId>com.example</groupId> <artifactId>springboot-dubbo-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <properties> </properties> <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> </dependency> <!--新增後續dubbo專案中所需依賴,dubbo、zk。 父模組pom中使用dependencyManagement來管理依賴版本號,子模組pom中不需要再寫版本號,exclusion也不需要--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
springvoot-dubbo-client/pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>springboot-dubbo-client</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springboot-dubbo-client</name> <description>Demo project for Spring Boot</description> <parent> <groupId>com.example</groupId> <artifactId>springboot-dubbo-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <properties> </properties> <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> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--新增後續dubbo專案中所需依賴,dubbo、zk。 父模組pom中使用dependencyManagement來管理依賴版本號,子模組pom中不需要再寫版本號,exclusion也不需要--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>springboot-dubbo-server</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
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。
按住ctrl鍵,滑鼠點選,然後點選父pom中的值,進入更上一層pom:
可以看到spring的版本是4.3.13:
3 測試
這裡就先不寫程式碼了,到下一章再寫。直接編譯一下,如果編譯成功,說明pom檔案的配置沒有什麼大問題。
點開右側Maven Projects,雙擊父模組Lifecycle中的compile,進行程式碼編譯,或者直接在Terminal中執行命令:mvn compile。
編譯通過啦~~
到這裡,Spring Boot多模組專案建立與配置就介紹完啦。
這樣一個過程實踐下來,再去看開發的程式碼結構,應該會輕鬆不少吧~~~
參考:相關推薦
Springboot整合dubbo構建maven多模組專案(一)- 專案建立和pom.xml中jar包配置
以前一直用Spring作為容器構建專案,但是看到Spring官網一直在推Springboot,最重要的是Springboot確實避免自己尋找多個jar包(大多數情況下,可能自己都不記得該引入哪些jar包)和jar包之間衝突的問題,同時省掉了在整合其他框架時候
Springboot整合dubbo構建maven多模組專案(四)
在中,我們配置了一個dubbo專案,包含三個模組springboot-dubbo-api、springboot-dubbo-server和springboot-dubbo-client,並且在springboot-dubbo-server和springboot-dubbo-c
Springboot+Maven多模組開發 (一)初始化工程(新建第一個web工程)
學習Springboot+maven多模組開發筆記。 首先建立一個空專案,新建一個pom檔案,該pom檔案是整個工程的parent pom。 pom檔案內容如下: <pre name="code" class="html"><?xml version
c#多線程(一)——基礎概念和基本使用
err inf nag -c 完成 KS 是否 only () 一、多線程相關的基本概念 進程(Process):是系統中的一個基本概念。 一個正在運行的應用程序在操作系統中被視為一個進程,包含著一個運行程序所需要的資源,進程可以包括一個或多個線程 。進程之間是相對獨立的,
電商大資料分析平臺專案(一)專案框架
開發可以在web專案中內嵌的js sdk。每當使用者瀏覽到網站頁面或者觸發某種事件時,會呼叫js程式碼,根據使用者cookie傳送一個session資訊這時到我們的nginx伺服器中。 nginx伺服器在接收到傳送的session後會將其寫入日誌檔案中記錄下來,這時監聽日誌檔案的flume會將session
Java進階 ——— Java多執行緒(一)之程序和執行緒
引言 講到執行緒,不可避免的提到程序。而因為執行緒無法脫離程序單獨存在,那什麼是程序? 延伸閱讀,Java多執行緒系列文章 什麼是程序? 程序:具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的最小單位。 例如手機執行的眾多
上手spring boot專案(一)之如何在controller類中返回到頁面
題記:在學習了springboot和thymeleaf之後,想完成一個專案練練手,於是使用springboot+mybatis和thymeleaf完成一個部落格系統,在完成的過程中出現的一些問題,將這些問題記錄下來,作為自己的學習心得。在這先感謝群主TyCoding的Tumo專案,雖然本人實在太菜了,好些地方
構建Maven多模組專案+SSM框架整合(一)
Maven Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model
基於STS對springboot eureka叢集進行Maven多模組構建
基於STS對springboot進行Maven多模組構建 這是整體的模組 1、父級模組: 把pom檔案中的war 改成pom 2、(1)構建eureka-server-springboot 在主工程右鍵—>maven—>New Maven Module Project
IntelliJ IDEA 構建maven多模組工程專案(詳細多圖)
食用前須知 本文以a b c 三個模組為例來搭建專案,以達到通俗易懂的初衷 模組a —– 基模組,就是人們常說的parent 模組b —– 其他模組都需要使用的一些工具,比如時間工具,json工具等 模組c —– 專案主要的內容,一般為
STS(Eclipse)構建Maven多模組專案(水平結構和樹形結構)
在配置完Java開發環境和MAVEN後,我們來建立專案 STS(Eclipse)下載 請到官網http://spring.io/tools/sts/all/ 下載STS最新版 然後放到G盤,然後解壓到當前 G:\sts-bundle\
Intellij 構建maven多模組專案(二)
拿了一個,黑馬程式培訓專案,來講! 淘淘商城。 1. 父工程,下面,兩個子工程。 2.manager,聚合工程,聚合工程下面新增,5個子模組。 3.為什麼要使用,聚合工程?這個就要自己去學maven相關。 使用不使用聚合,關聯依賴和繼承都是要自己手動去關聯的。
Intellij 構建maven多模組專案(一)
參考: IntelliJ IDEA 構建maven多模組工程專案 來自 <https://blog.csdn.net/sinat_34344123/article/details/79080601> idea--8.新建maven父子專案 來自 <https:/
springboot構建maven多模組工程
一 .建立父工程: 1.首先使用 Spring Initializr 來快速建立好一個Maven工程。然後刪除無關的檔案,只需保留pom.xml 檔案。 然後在 pom.xml 裡面宣告該父工程
使用maven構建多模組專案(一)
1. 建立helloweb專案的骨架結構 (1)建立一個maven專案helloweb,刪除target資料夾,如下圖所示 (2)在helloweb目錄下,建立以下4個資料夾 a. helloweb-parent b. helloweb-en
構建Maven多模組
構建Maven多模組 背景介紹 在學習《Spring-Cloud微服務架構》中,曾看到Maven多模組,一時來了興趣便進行研究。我比較喜歡用IDEA,所以這裡用IDEA來介紹了。 學習之旅 按照圖中步驟一步步來 然後一直next
SpringBoot 整合Dubbo構建分散式服務
SpringBoot Dubbo 實踐 概述: Dubbo是Alibaba開源的分散式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地鬆耦合)。從服務模型的角度來看,Dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服
(一) Eclipse建立Maven多模組專案
在eclipse下構建maven專案,該專案由多個子模組組成。 1.建立一個父專案 NEW –>project–>maven–>maven Project,點選下一步,進入new
[SpringBoot]IDEA快速構建SpringBoot應用專案(一)
構建專案 開啟IDEA,File -> New Project,選擇Spring Initializr,選擇SDK版本(JDK8),點NEXT Group 自定義域名名稱 Artifact 自定義應用名稱,點NEXT 如下圖操作,點NEXT
2018 - IDEA 中 搭建 SpringBoot 專案(一)
一、選擇 JDK 二、選擇專案依賴 三、專案結構 四、啟動 一、選擇 JDK 注:這裡可以選擇用war包,即以後將war包複製到Tomcat下解壓部署即可。 二、選擇專案依賴 我們這邊選擇:Web、Freemarker、MySQ