dependencies與dependencyManagement的區別

本文轉自CSDN,原文點擊此處。本文稍有修改。

DepencyManagement應用場景

如果一個項目有多個模塊組成,各個模塊各自引入自己的bao,難免出現同一個包出現在項目的不同模塊中的情況。這時候就會產生沖突,進而導致打包失敗。
此時就要用到統一的依賴管理,目的就是統一項目使用到的依賴。

如何使用dependencyManagement

由于我們的模塊很多,所以我們又抽象了一層,抽出一個itoo-base-parent來管理子項目的公共的依賴。為了項目的正確運行,必須讓所有的子項目使用依賴項的統一版本,必須確保應用的各個項目的依賴項和版本一致,才能保證測試的和發布的是相同的結果。
在我們項目頂層的POM文件中,我們會看到dependencyManagement元素。通過它元素來管理jar包的版本,讓子項目中引用一個依賴而不用顯示的列出版本號。Maven會沿著父子層次向上走,直到找到一個擁有dependencyManagement元素的項目,然后它就會使用在這個dependencyManagement元素中指定的版本號

  1. Itoo-base-parent(pom.xml)
<dependencyManagement>
        
        <dependencies>
            <dependency>
                <groupId>org.eclipse.persistence</groupId>
                <artifactId>org.eclipse.persistence.jpa</artifactId>
                <version>${org.eclipse.persistence.jpa.version}</version>
                <scope>provided</scope>
            </dependency>
            
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-api</artifactId>
                <version>${javaee-api.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
  1. Itoo-base(pom.xml)
<!--繼承父類-->
      <parent>
        <artifactId>itoo-base-parent</artifactId>
        <groupId>com.tgb</groupId>

        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../itoo-base-parent/pom.xml</relativePath>
    </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>itoo-base</artifactId>
        <packaging>ejb</packaging>
        
        <!--依賴關系-->
        <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.jpa</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

<parent>標簽里面括出了依賴的父類項目,此時子類的pom文件中加入依賴的時候,就不需要再指定每個依賴項的版本了,反倒是在parent的pom文件中一起指定。需要說明的是:父項目的pom文件起到的是聲明的作用,你可以不用里面的依賴,但是用了就必須要在子項目的pom文件中添加,知識不需要加版本號了。原因是:父類項目的pom文件起聲明作用,并不實際引入,實際引入還是在子項目中實現的
只有在子項目中寫了該依賴項,并且沒有指定具體版本,才會從父項目中繼承該項,并且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那么會使用子項目中指定的jar版本。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,868評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,937評論 6 342
  • 當我們的項目模塊很多的時候,我們使用Maven管理項目非常方便,幫助我們管理構建、文檔、報告、依賴、scms、發布...
    angeChen閱讀 1,353評論 0 0
  • 李瀟南閱讀 754評論 0 0
  • 秦淮河的燈影在夜色中溫暖迷蒙 擺渡人撐一枝長篙費力地在水中劃行 每一劃是對過去的懷想 每一劃是都未來的展望 縱橫在...
    自然律閱讀 476評論 0 4