1. 程式人生 > >【Maven官網文件】Optional & Exclusion Maven中的可選依賴和依賴性排除

【Maven官網文件】Optional & Exclusion Maven中的可選依賴和依賴性排除

本節介紹Maven中的可選依賴和依賴性排除功能。 【原文連結】

Optional 依賴

如果明確一個 project 無論出於什麼原因考慮都不可能繼續分割成子專案,則其依賴可以使用 optional。 如果其他 project 依賴了 使用 optional 的 project, 則他們需要自主選擇該依賴,亦即是說,該 optional 依賴不會通過傳遞性依賴傳遞給上層的 project。

為什麼要使用 optional 依賴?

如果是為了節省記憶體空間大可不必如此選擇optional依賴。原因是,使用一個 project,控制其依賴list是很重要的,因為這些依賴最後可能都會打包成 war、jar 等等,可能會違反許可協議或者引起類路徑問題。

如何使用 optional 依賴?

在你的 dependency 中將屬性 <optional>設定為true即可。projectA的依賴如下:

<project>
  ...
  <dependencies>
    <!-- 宣告設定為optional的依賴項 -->
    <dependency>
      <groupId>sample.ProjectB</groupId>
      <artifactId>Project-B</artifactId>
      <version
>
1.0</version> <scope>compile</scope> <optional>true</optional> <!-- 僅僅支援true、false --> </dependency> </dependencies> </project>

optional 是怎麼工作的?

Project-A -> Project-B

上面的這幅圖表示了,projetA依賴於projectB, 且 projectB的設定為依賴可選項為true。

Project-X -> Project-A

假如現在有另一個peojectX依賴於projectA 時,optional 設定就生效了,你會發現 projectX 並沒有依賴於 projectB,你必須直接在 projectX 的pom中依賴 projectB。 也就是在以下的依賴鏈中:

Project-X -> Project-A -> Project-B

Project-B 失去了傳遞依賴性。

Exclusions 依賴

Maven 是解決依賴關係的,在你的專案類路徑中可能包含不必要的依賴。例如,你所依賴的專案可能並沒有正確的宣告他們的依賴。為了解決這個情況,maven 2.x 包含了顯示排除依賴的概念exclusion。 Exclusions 用於排除在你的pom中的某個指定的依賴,當你build你的project時,這個依賴不會打包到你的類路徑下。

如何使用 exclusion依賴?

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- 宣告排除依賴 -->
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
  </dependencies>
</project>

ProjectX 依賴於 ProjectA, ProjectA 依賴於ProjectB,在 ProjectX 的pom中將ProjectA的dependency中新增ProjectB的排除依賴。這樣ProjectB就不會在構建的時候打包到ProjectX的類路徑中的。

要完成此功能一樣的效果,你也可以在ProjectA中將ProjectB的optional設定為true。

Optional 和 Exclusions 依賴的總結

  • Optional 是保證依賴向上不擴散
  • Exclusions 是排除依賴的子(孫…)依賴關係