BOM簡介

BOM(Bill of Materials)是由Maven提供的功能,它通過定義一整套相互兼容的jar包版本集合,使用時(shí)只需要依賴該BOM文件,即可放心的使用需要的依賴jar包,且無需再指定版本號。BOM的維護(hù)方負(fù)責(zé)版本升級,并保證BOM中定義的jar包版本之間的兼容性。
為什么要使用BOM
使用BOM除了可以方便使用者在聲明依賴的客戶端時(shí)不需要指定版本號外,最主要的原因是可以解決依賴沖突,如考慮以下的依賴場景:
項(xiàng)目A依賴項(xiàng)目B 2.1和項(xiàng)目C 1.2版本:
項(xiàng)目B 2.1依賴項(xiàng)目D 1.1版本;
項(xiàng)目C 1.2依賴項(xiàng)目D 1.3版本;
在該例中,項(xiàng)目A對于項(xiàng)目D的依賴就會出現(xiàn)沖突,按照maven dependency mediation的規(guī)則,最后生效的可能是:項(xiàng)目A中會依賴到項(xiàng)目D1.1版本(就近原則,取決于路徑和依賴的先后,和Maven版本有關(guān)系)。
在這種情況下,由于項(xiàng)目C依賴1.3版本的項(xiàng)目D,但是在運(yùn)行時(shí)生效的確是1.1版本,所以在運(yùn)行時(shí)很容易產(chǎn)生問題,如 NoSuchMethodError, ClassNotFoundException等。
如何定義BOM
BOM本質(zhì)上是一個(gè)普通的POM文件,區(qū)別是對于使用方而言,生效的只有<dependencyManagement>這一個(gè)部分。只需要在<dependencyManagement>定義對外發(fā)布的客戶端版本即可:
<?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.ydj.qd</groupId>
  <artifactId>inf-bom</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>
  <name>inf-bom</name>
  <description>第三方j(luò)ar包統(tǒng)一管理</description>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring.version>4.3.15.RELEASE</spring.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <!-- 阿里 -->
      <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.12</version>
      </dependency>
      <!-- https://mvnrepository.com/artifact/com.aliyun.mns/aliyun-sdk-mns -->
      <dependency>
        <groupId>com.aliyun.mns</groupId>
        <artifactId>aliyun-sdk-mns</artifactId>
        <version>1.1.8</version>
        <classifier>jar-with-dependencies</classifier>
      </dependency>
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.29</version>
      </dependency>
      <!-- Apache -->
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.2</version>
      </dependency>
      <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.2</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.1</version>
      </dependency>
      <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.1</version>
      </dependency>
      <!-- 谷歌 -->
      <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>27.0.1-jre</version>
      </dependency>
      <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
      </dependency>
      <!-- 常用工具 -->
      <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.7</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.14.4</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
  </build>
  <distributionManagement>
    <repository>
      <id>maven-releases</id>
      <name>maven-releases</name>
      <url>http://mvn.ydj.com/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
      <id>maven-snapshots</id>
      <name>maven-snapshots</name>
      <url>http://mvn.ydj.com/repository/maven-snapshots/</url>
    </snapshotRepository>
  </distributionManagement>
</project>另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.chinadenli.net,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
                分享名稱:微服務(wù)中使用MavenBOM來管理你的版本依賴詳解-創(chuàng)新互聯(lián)
                
                URL網(wǎng)址:http://www.chinadenli.net/article38/ccsdpp.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)公司、搜索引擎優(yōu)化、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容