一: 依賴范圍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 分析依賴關系