附 2:專有名詞解釋
章節中有提到依賴本工程內部的 common模塊,裏面一般會定義一些全部模塊都會用到的一些基礎功能,好比 全局異常碼、分佈式鎖、統一響應實體等等
在互聯網公司一般都是分事業部的,而後會存在一個叫 基礎部門/基礎中心的事業部,這個部門可能會提供一些公司的基本類庫,eg:mq相關的統一的amqp操做、rpc相關的統一的dubbo操做等等。最終這些都會以jar包的形式推送到maven倉庫(公司內部須要搭建專有的maven倉庫)。如今是spring boot的時代,若是公司用的是springboot這一套體系的話,這些jar包一般是以starter的方式提供,再利用springboot的自動裝配機制,其餘事業部能夠很方便的對接。
常見的springboot、mybatis
因爲公司內部使用的是springboot相關的技術棧,所以,我開發的二方庫包是以starter的方式提供的。整個對接流程只須要兩步:spring
一、須要將二方庫包推送至maven倉庫springboot
二、其餘事業部只須要添加二方庫包的maven座標mybatis
這裏會有一些小細節:二方庫包是一個項目工程,也會依賴一些二方庫、三方庫的狀況。一般,二方庫內部依賴的jar包的scope都會設置爲provider(默認系統已經提供,不將二方庫包內部依賴的jar包與對接方的項目耦合),可是不乏會出現對接方無添加過相關依賴的狀況,所以須要添加符合對接方系統版本的依賴。接下來,將以一個springboot引入spring-kafka的案例來理解如何找到合適的spring-kafka版本。框架
假設這麼一個場景:我開發的二方庫包使用到的技術棧是springboot,內部開發的其中一個功能須要依賴spring-kafka的三方庫。衆所周知,springboot爲咱們提供了及其溫馨的開發環境,當咱們引入springboot框架後,它內部已經定義了符合當前版本的全部三方庫依賴。所以,假設咱們要引入spring-kafka模塊,只須要在pom.xml文件中添加以下座標便可:maven
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- 只須要添加以下座標便可,不須要指定版本 --> <dependencies> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> </dependencies>
在上述引入spring-kafka 模塊時,咱們沒有指定version也可使用。這是由於spring-boot-starter-parent內部的dependencyManagement中定義了spring-kafka的依賴,做爲子模塊,只須要引入便可,版本號會默認繼承父工程中的定義。若是對接方使用的是springboot 1.4.1.RELEASE版本,這個時候,再使用一樣的方式來引入spring-kafka的話,你會發現,maven找不到spring-kafka的版本:分佈式
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- 只須要添加以下座標便可,不須要指定版本 --> <dependencies> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> </dependencies>
其大體的緣由就是:在spring-boot-starter-parent中內部並無依賴過spring-kafka,所以沒法繼承父類定義的版本,最終maven會提示找不到對應的版本。對接方一直以springboot 1.4.1.RELEASE版本正常開發,不可能爲了集成你的二方庫而升級springboot版本吧?所以,咱們須要爲對接方找到合適的spring-kafka版本。ide
另一種作法就是:參考此連接https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/。在此連接中,是springboot的全部版本的依賴,如今咱們要看1.4.1.RELEASE版本的springboot內部依賴了哪些類庫,咱們能夠這麼定位:spring-boot
定位版本idea
查看依賴pom文件spa
善於搜索(搜索spring-kafka)
能夠看到,在springboot 1.4.1.RELEASE版本中內部並無依賴spring-kafka。此時該怎麼辦呢?將springboot版本升級,繼續日後搜索,最終你會發現,在1.5.0.RELEASE版本中內部開始依賴了spring-kafka。所以,咱們能夠嘗試,在maven中引入查找出來的版本1.1.2.RELEASE
對應的pom.xml文件爲
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>1.1.2.RELEASE</version> </dependency>
在這種場景下,引入**1.1.2.RELEASE**版本能夠解決問題,對接方的系統也能正常工做。 也許這種方式在其餘場景不適用,但這確實是一種方式,咱們能夠經過https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/連接找到每一個springboot版本內部依賴的三方庫,這比咱們在idea中修改版本號再下載對應的版本方便的多。