記一次 dependencyManagement 問題解決


使用場景

定義在parent項目中,管理children中引入的依賴版本信息

定義來說比叫簡單,既然在父項目中定義了

創建maven項目,項目結構

wangshuyu-center
- wangshuyu-center-api
- wangshuyu-center-server
- wangshuyu-center-dao

wangshuyu-center pom.xml中引入了 dependencyManagement

<!-- wangshuyu-center pom.xml -->

<dependencyManagement >
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.7.RELEASE</version>
    </dependency>
  </dependencies>
</dependencyManagement>

wangshuyu-center-server 引入 wangshuyu-center pom.xml

<!-- wangshuyu-center-server pom.xml -->

<parent>
  <artifactId>wangshuyu-center</artifactId>
  <groupId>com.wangshuyu.center</groupId>
  <version>1.0-SNAPSHOT</version>
</parent>

此時在 External Libraries中是沒有 spring-jdbc的 jar

如果module中需要使用 dependencyManagement 中的依賴,需要在自己的 pom.xml 中引入

<!-- wangshuyu-center-server pom.xml -->

<parent>
  <artifactId>wangshuyu-center</artifactId>
  <groupId>com.wangshuyu.center</groupId>
  <version>1.0-SNAPSHOT</version>
</parent>

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <!-- 這里不需要再定義version,會使用management中的 -->
    <!-- 如果定義了version則優先使用自定義的,最短路徑原則 -->
  </dependency>

</dependencies>

比較有意思的是,如果我在wangshuyu-center-server中引入新的version

當滿足下面兩個條件時,會標紅

  1. version在本地倉庫中是不存在的;

  2. 子pom中沒有引入該依賴;

結論:dependencyManagement中的定義的依賴不會自動去從遠程倉庫下載,只有當module引入該依賴時才會去從遠程倉庫下載。

其實也很好理解,dependencyManagement是規范版本信息,所定義的依賴module中並不一定會使用,只有當module使用時才需要導入。

更進一步

dependencyManagement中的依賴來源:從module中提取

當在開發module時,需要對新引入的dependency做版本管理時,使用dependencyManagement,將module中的version放在父項目中管理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM