SpringCloud Alibaba微服務實戰四 - 版本管理

導讀:本篇做爲SpringCloud Alibaba微服務實戰系列的第四篇,咱們對以前的微服務框架進行優化,經過Maven bom機制管理全部組件的版本。html

BOM 簡介

BOM(Bill of Materials)是由Maven提供的功能,它經過定義一整套相互兼容的jar包版本集合,使用時只須要依賴該BOM文件,便可放心的使用須要的依賴jar包,且無需再指定版本號。BOM的維護方負責版本升級,並保證BOM中定義的jar包版本之間的兼容性。java

爲何要使用BOM

使用BOM除了能夠方便使用者在聲明依賴的客戶端時不須要指定版本號外,最主要的緣由是能夠解決依賴衝突,防止你項目中出現 NoSuchMethodError, ClassNotFoundException等不可控的異常。mysql

項目改造

在SpringCloud項目體系中咱們約定跟SpringCloud版本相關的用主pom文件進行版本控制,對於第三方組件或者公共模塊的版本使用自定義的bom進行控制,接下來咱們一步步對原有框架進行改造。sql

  • 創建cloud-bom模塊
    此模塊很簡單,只有一個pom文件,定義項目模塊中所須要依賴的第三方組件和公共模塊,完整的pom文件以下:
<?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.jianzh5.cloud</groupId>
    <artifactId>cloud-bom</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0</version>

    <properties>
        <mybatis-plus.version>3.1.1</mybatis-plus.version>
        <mysql.version>5.1.47</mysql.version>
        <cloud-alibaba.version>1.0.0</cloud-alibaba.version>
    </properties>
    <!--管理全部第三方jar包版本,SpringCloud Alibaba 版本由主Pom控制-->
    <dependencyManagement>
        <dependencies>
            <!--cloud-common 版本-->
            <dependency>
                <groupId>com.jianzh5.cloud</groupId>
                <artifactId>cloud-common</artifactId>
                <version>${cloud-alibaba.version}</version>
            </dependency>
            <dependency>
                <groupId>com.jianzh5.cloud</groupId>
                <artifactId>account-feign</artifactId>
                <version>${cloud-alibaba.version}</version>
            </dependency>
            <dependency>
                <groupId>com.jianzh5.cloud</groupId>
                <artifactId>product-feign</artifactId>
                <version>${cloud-alibaba.version}</version>
            </dependency>

            <!--database-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>
        </dependencies>

    </dependencyManagement>

    <repositories>
        <repository>
            <id>nexus-aliyun</id>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </repository>
    </repositories>
</project>複製代碼

注意,這個模塊不要再定義 依賴了,不然在主pom文件中引入bom後項目啓動會報循環依賴的異常(死循環) ,具體錯誤以下所示:apache

The build could not read 1 project -> [Help 1]
  
  The project com.jianzh5.cloud:cloud-aliaba:1.0.0 (D:\project_jianzh5\cloud-aliaba\pom.xml) has 1 error
    The dependencies of type=pom and with scope=import form a cycle: com.jianzh5.cloud:cloud-bom:1.0.0 -> com.jianzh5.cloud:cloud-bom:1.0.0 @ com.jianzh5.cloud:cloud-bom:1.0.0
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
For more information about the errors and possible solutions, please read the following articles:複製代碼

  • 在主pom文件 中引入bom模塊的pom
<!--統一版本-->
<dependency>
    <groupId>com.jianzh5.cloud</groupId>
    <artifactId>cloud-bom</artifactId>
    <version>1.0.0</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>複製代碼

此段內容須要放在dependencyManagement中第一個位置微信

  • 去掉其餘模塊中引用組件的 定義,如:
<dependency>
    <groupId>com.jianzh5.cloud</groupId>
    <artifactId>cloud-common</artifactId>
</dependency>複製代碼

  • 改造完成後總體結構以下
    image.png
  • 改造完成後對原項目進行測試,保證不影響原有功能
    建議在項目初期就引入bom進行管理,後期改造會相對麻煩。

至此咱們已經完成了項目的統一版本管理,那麼本期的「SpringCloud Alibaba微服務實戰四 - 版本管理」篇也就該結束啦,我們下期有緣再見!mybatis

系列文章框架

image.png

歡迎掃碼關注微信公衆號或 我的博客maven

相關文章
相關標籤/搜索