Maven 的依賴範圍

Maven 在編譯項目主代碼的時候須要使用一套 classpath,在編譯和執行測試的時候會使用另一套 classpath。最後,實際運行 Maven 項目的時候,又會使用一套 classpath。依賴範圍就是用來控制依賴與這三種 classpath 的關係的。java

如,下面示例,junit 的依賴範圍就是 test。api

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

Maven 公有如下幾種依賴範圍:maven

  • compile: 編譯依賴範圍,若是沒有指定,就會默認使用該依賴範圍。使用此依賴範圍的Maven 依賴,對於編譯,測試和運行三種 classpath 都有效。ide

  • test: 測試依賴範圍。使用此依賴範圍的 Maven 依賴,只對於 測試 classpath 有效,在編譯主代碼或者運行項目使用時將沒法使用此依賴。典型的例子就是 Junit。測試

  • provided: 已提供依賴範圍。使用此依賴範圍的 Maven 依賴,對於編譯和測試 classpath 有效,但在運行項目的時候無效。典型的例子就是 servlet-api,編譯和測試項目時候,須要該依賴,可是在運行項目時,因爲容器已經提供,就不須要 maven 重複的引入一遍。spa

    <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
                <scope>provided</scope>
            </dependency>
  • runtime: 運行時依賴範圍。使用此依賴的 Maven 依賴,對於測試和運行的 classpath 有效,但在編譯主代碼時無效。典型的例子就是 JDBC 驅動實現。項目主代碼的編譯只須要 JDK 提供的 JDBC 接口,只有在執行測試或者運行項目時才須要實現上述接口的具體 JDBC 驅動。code

除了以上 4 種類型外,還有 import 和 system, 不經常使用,此處暫不介紹。xml

參考資料:《Maven 實戰》接口

相關文章
相關標籤/搜索