1. 程式人生 > 其它 >依賴傳遞

依賴傳遞

1、依賴傳遞的概念

  pom.xml 中引入的依賴,在構建或執行時所有必要的類和資源都會自動新增到專案的 classpath 中。

  Maven 中的依賴是有傳遞(Transitive)性的,預設會包含傳遞的依賴,這樣就不用手動引用每一個依賴了。比如下面這個依賴關係中,A 依賴 B,B 依賴了 C……,如果你依賴 A 的話,就會自動包含 A/B/C/D/E。

    

2、依賴傳遞存在的問題

    

  由於傳遞依賴,D 2.0D 1.0都會被加入 ClassPath 中,但因為它們版本不同,很可能會有包衝突等一系列問題。

3、解決依賴傳遞的方式

  解決這個依賴傳遞導致的衝突問題,有兩種方案:

  (1)在使用者,也就是發起依賴方進行排除 

<dependency>
  <groupId>group-a</groupId>
  <artifactId>artifact-a</artifactId>
  <version>1.0</version>
  <exclusions>
    <exclusion>
      <groupId>group-c</groupId>
      <artifactId>excluded-artifact</artifactId>
    </exclusion>
  </exclusions>
</dependency>

  (2)在提供方,將依賴的範圍定義為不傳遞,這樣在構建時就不會包含這些不傳遞的依賴包了。也有兩種方式:

   使用<scope>provided</scope>

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
            <scope>provided</scope>
</dependency>

   使用<optional>true</optional>

<dependency>
            <groupId>com.coohua.caf</groupId>
            <artifactId>caf-boot-starter-web</artifactId>
            <optional>true</optional>
</dependency>