配置Junit依賴時,我們這樣配置:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
其中的scope就是依賴範圍,依賴範圍作用於classpath。依賴範圍與三種classpath關係如下:
依賴範圍(scope) | 對於編譯classpath有效 | 對於測試classpath有效 | 對於運行時classpath有效 | 例子 |
---|---|---|---|---|
compile(默認) | Y | Y | Y | Spring-core |
test | -- | Y | -- | Junit |
provided | Y | Y | -- | servlet-api |
runtime | -- | Y | Y | JDBC驅動實現 |
system | Y | Y | -- |
本地的,Maven倉庫之外的類庫文件 |
Maven依賴範圍不僅控制依賴與classpath的關係,還會影響依賴傳遞。
最左邊一列表示第一直接依賴範圍,最上面一行表示第二直接依賴範圍,中間的交叉單元格則表示傳遞性依賴範圍。
compile | test | provided | runtime | |
compile | compile | --- | --- | runtime |
test | test | --- | --- | test |
provided | provided | --- | provided | provided |
runtime | runtime | --- | --- | runtime |
仔細觀察上面表格,我們發現這樣的規律:
|