1. 程式人生 > >Springboot整合dubbo構建maven多模組專案(一)- 專案建立和pom.xml中jar包配置

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執行不起來,報各種錯誤

),預設使用的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打頭的。

這是練習,為了省事,就沒有直接按照標準來,直接默認了,但還是儘量按照上面的規範來填寫。如下所示:


三、點選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-starterspring-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專案中所需依賴,dubbozk-->
<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專案中所需依賴,dubbozk           父模組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專案中所需依賴,dubbozk           父模組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。

avatar

按住ctrl鍵,滑鼠點選,然後點選父pom中的值,進入更上一層pom:

可以看到spring的版本是4.3.13:

3 測試

這裡就先不寫程式碼了,到下一章再寫。直接編譯一下,如果編譯成功,說明pom檔案的配置沒有什麼大問題。

點開右側Maven Projects,雙擊父模組Lifecycle中的compile,進行程式碼編譯,或者直接在Terminal中執行命令:mvn compile。

編譯通過啦~~

到這裡,Spring Boot多模組專案建立與配置就介紹完啦。

這樣一個過程實踐下來,再去看開發的程式碼結構,應該會輕鬆不少吧~~~

參考:

相關推薦

Springboot整合dubbo構建maven模組專案- 專案建立pom.xmljar配置

       以前一直用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