最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微服務(wù)中使用Maven BOM來管理你的版本依賴詳解

 更新時(shí)間:2019年12月05日 08:27:14   作者:飄渺Jam  
這篇文章主要介紹了微服務(wù)中使用Maven BOM來管理你的版本依賴,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

BOM簡(jiǎn)介

BOM(Bill of Materials)是由Maven提供的功能,它通過定義一整套相互兼容的jar包版本集合,使用時(shí)只需要依賴該BOM文件,即可放心的使用需要的依賴jar包,且無需再指定版本號(hào)。BOM的維護(hù)方負(fù)責(zé)版本升級(jí),并保證BOM中定義的jar包版本之間的兼容性。

為什么要使用BOM

使用BOM除了可以方便使用者在聲明依賴的客戶端時(shí)不需要指定版本號(hào)外,最主要的原因是可以解決依賴沖突,如考慮以下的依賴場(chǎng)景:

項(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對(duì)于項(xiàng)目D的依賴就會(huì)出現(xiàn)沖突,按照maven dependency mediation的規(guī)則,最后生效的可能是:項(xiàng)目A中會(huì)依賴到項(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ū)別是對(duì)于使用方而言,生效的只有<dependencyManagement>這一個(gè)部分。只需要在<dependencyManagement>定義對(duì)外發(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>

項(xiàng)目使用方法

在你的項(xiàng)目主pom.xml文件中<dependencyManagement></dependencyManagement>節(jié)點(diǎn)下首位處加入如下:

<dependencyManagement>
  <dependencies>
     <dependency>
      <groupId>com.jlcx.qd</groupId>
      <artifactId>inf-bom</artifactId>
      <version>${version}</version>
      <type>pom</type>
      <scope>import</scope>
     </dependency>
     
     <dependency>
      ...
     </dependency>
  </dependencies>
</dependencyManagement>

在需要使用相關(guān)JAR包的pom.xml文件中<dependencies></dependencies>節(jié)點(diǎn)下引入如下:

<dependencies>
  ...
  <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
  </dependency>

  <dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
  </dependency>
  ....
</dependencies>

如果需要使用不同于當(dāng)前bom中所維護(hù)的jar包版本,則加上<version>覆蓋即可,如:

<dependencies>
  ...
  <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
  </dependency>

  <dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.1</version>
  </dependency>
  ....
</dependencies>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java并發(fā)編程加鎖導(dǎo)致的活躍性問題詳解方案

    Java并發(fā)編程加鎖導(dǎo)致的活躍性問題詳解方案

    所謂并發(fā)編程是指在一臺(tái)處理器上"同時(shí)"處理多個(gè)任務(wù)。并發(fā)是在同一實(shí)體上的多個(gè)事件。多個(gè)事件在同一時(shí)間間隔發(fā)生,所以編寫正確的程序很難,而編寫正確的并發(fā)程序則難上加難
    2021-10-10
  • 如何解決java壓縮文件亂碼問題

    如何解決java壓縮文件亂碼問題

    在本篇文章中我們給大家分享的是一篇關(guān)于java壓縮文件亂碼問題的解決辦法,有需要的朋友們可以學(xué)習(xí)下。
    2019-12-12
  • Java通過Fork/Join優(yōu)化并行計(jì)算

    Java通過Fork/Join優(yōu)化并行計(jì)算

    這篇文章主要為大家詳細(xì)介紹了Java通過Fork、Join來優(yōu)化并行計(jì)算,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的示例詳解

    SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的示例詳解

    雖然Spring官方給我們提供了很多的啟動(dòng)器供我們使用,但有時(shí)候我們也會(huì)遇到某些特殊場(chǎng)景,這些啟動(dòng)器滿足不了。這個(gè)時(shí)候就需要自定義一個(gè)啟動(dòng)器供我們使用,本文為大家介紹了SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的方法,希望對(duì)大家有所幫助
    2023-01-01
  • Spring AI TikaDocumentReader詳解

    Spring AI TikaDocumentReader詳解

    TikaDocumentReader是SpringAI中用于從多種格式文檔中提取文本內(nèi)容的組件,支持PDF、DOC/DOCX、PPT/PPTX和HTML等格式,它在構(gòu)建知識(shí)庫(kù)、文檔處理和數(shù)據(jù)清洗等任務(wù)中非常有用
    2025-01-01
  • 一文帶你解讀Java序列化和反序列化機(jī)制

    一文帶你解讀Java序列化和反序列化機(jī)制

    序列化是將對(duì)象轉(zhuǎn)換成二進(jìn)制字節(jié)流的過程;反序列化是從二進(jìn)制字節(jié)流中恢復(fù)對(duì)象的過程。本文將大家詳細(xì)講講二者的原理與實(shí)現(xiàn),希望對(duì)大家有所幫助
    2023-01-01
  • 一次 Java 內(nèi)存泄漏的排查解決過程詳解

    一次 Java 內(nèi)存泄漏的排查解決過程詳解

    這篇文章主要介紹了一次 Java 內(nèi)存泄漏的排查過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • SpringBoot如何用java生成靜態(tài)html

    SpringBoot如何用java生成靜態(tài)html

    這篇文章主要介紹了SpringBoot如何用java生成靜態(tài)html,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,需要的朋友可以參考一下
    2022-06-06
  • Java實(shí)現(xiàn)在線語音識(shí)別

    Java實(shí)現(xiàn)在線語音識(shí)別

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)在線語音識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • mybatis使用foreach標(biāo)簽進(jìn)行嵌套插入

    mybatis使用foreach標(biāo)簽進(jìn)行嵌套插入

    數(shù)據(jù)庫(kù)插入操作常見于多層架構(gòu)設(shè)計(jì)中,本文提供了一個(gè)具體的實(shí)現(xiàn)方案,涉及三層實(shí)體類結(jié)構(gòu),第一層實(shí)體類負(fù)責(zé)基本數(shù)據(jù)結(jié)構(gòu)的定義,第二層和第三層實(shí)體類則提供更詳細(xì)的業(yè)務(wù)邏輯處理,同時(shí),文章還介紹了相應(yīng)的mapper接口和配置文件設(shè)置
    2024-09-09

最新評(píng)論

视频| 永定县| 江孜县| 丁青县| 巫溪县| 宜黄县| 滁州市| 古田县| 日喀则市| 疏附县| 江安县| 铜梁县| 邯郸市| 揭东县| 靖远县| 石家庄市| 大连市| 景泰县| 蓬溪县| 德惠市| 星座| 东山县| 镇雄县| 璧山县| 读书| 咸丰县| 微山县| 塔城市| 庆城县| 波密县| 佛教| 大连市| 高唐县| 陵川县| 车致| 景洪市| 永川市| 常宁市| 城口县| 永吉县| 泾源县|