Maven依賴范圍及依賴傳遞


一: 依賴范圍scope

共5種,compile (編譯)、test (測試)、runtime (運行時)、provided、system

不指定,則依賴范圍默認為compile.

 

compile:編譯依賴范圍,在編譯,測試,運行時都需要。

test: 測試依賴范圍,測試時需要。編譯和運行不需要。如Junit

runtime: 運行時依賴范圍,測試和運行時需要。編譯不需要。如JDBC驅動包

provided:已提供依賴范圍,編譯和測試時需要。運行時不需要。如servlet-api

system:系統依賴范圍。本地依賴,不在maven中央倉庫。

 

 

二:依賴的傳遞

A->B(compile)     第一關系: a依賴b   compile

B->C(compile)     第二關系: b依賴c   compile

 

當在A中配置

<dependency>  
            <groupId>com.B</groupId>  
            <artifactId>B</artifactId>  
            <version>1.0</version>  
</dependency>

則會自動導入c包。關系傳遞如下表:

 

第一          第二

compile

test

provided

runtime

compile

compile

-

-

runtime

test

test

-

-

test

provided

provided

-

provided

provided

runtime

runtime

-

-

runtime

3.依賴沖突的調節

A->B->C->X(1.0)

A->D->X(2.0)

由於只能引入一個版本的包,此時Maven按照最短路徑選擇導入x(2.0)

 

A->B->X(1.0)

A->D->X(2.0)

路徑長度一致,則優先選擇第一個,此時導入x(1.0)

 

4.排除依賴

A->B->C(1.0)

此時在A項目中,不想使用C(1.0),而使用C(2.0)

則需要使用exclusion排除B對C(1.0)的依賴。並在A中引入C(2.0).

 

pom.xml中配置

<!--排除B對C的依賴-->

<dependency>  
            <groupId>B</groupId>  
            <artifactId>B</artifactId>  
            <version>0.1</version>  
            <exclusions>
                 <exclusion>
                    <groupId>C</groupId>  
                    <artifactId>C</artifactId><!--無需指定要排除項目的版本號-->
                 </exclusion>
            </exclusions>
</dependency> 

<!---在A中引入C(2.0)-->

<dependency>  
            <groupId>C</groupId>  
            <artifactId>C</artifactId>  
            <version>2.0</version> 
</dependency> 

 

5.依賴關系的查看

cmd進入工程根目錄,執行  mvn dependency:tree

會列出依賴關系樹及各依賴關系

 

mvn dependency:analyze    分析依賴關系

 

  


免責聲明!

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



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