需要明確的是,this is the passage of the documentation:
測試
此範圍表明,依賴並不需要正常使用的應用程序,並且僅適用於測試編譯和執行階段。這個範圍不是傳遞的。
這兩個句子處理在依賴關係解析期間可能出現的情況:聲明POM中的依賴關係,並考慮在POM中聲明的依賴關係的傳遞依賴關係。
第一部分意味着在您的POM中有一個範圍爲test
的依賴項將導致該依賴項僅在測試類路徑中可用。換句話說,它適用於當你已經明確宣佈在POM依賴關係:
<dependency>
<!-- GAV coordinates -->
<scope>test</scope>
</dependency>
嘗試使用它在主Java類(src/main/java
下)將導致編譯錯誤,並在測試Java類使用它(在src/test/java
下)會正常工作。
第二部分適用於在POM中聲明的依賴關係的依賴關係。這意味着在POM中聲明的依賴關係的測試範圍依賴關係將被省略。例如,假設你對一個名爲A的庫具有編譯時依賴性,並且A本身對B具有測試範圍的依賴性;那麼在依賴解析中B將被忽略,並且不會在類路徑上結束。邏輯是,A需要B來運行它的測試,但作爲A的消費者,你不需要B就能夠使用它。無論您聲明的依賴項的範圍如何(無論是compile
,runtime
還是test
),這些測試範圍的依賴關係都將被忽略,這就是爲什麼test
範圍被稱爲不可傳遞的原因。
換句話說,這一切都取決於「有些朋友」的含義。當您在POM中聲明測試作用域依賴項時,它將在測試類路徑中可用。它的所有編譯和運行時傳遞依賴關係也將在測試類路徑中可用,因爲compile
和runtime
範圍是可傳遞的,並且將繼承範圍爲test
。當POM不是你自己的時候,測試作用域依賴將會被忽略(因此它的依賴關係也將被忽略)。
我沒有得到「pom不是你自己」的一行時,請你詳細說明一下嗎? –
@ user2509521「當pom不是你自己的時候」意味着我在談論其他依賴關係的POM,即傳遞依賴關係。如果我的依賴關係的依賴關係是範圍測試,那麼它們在解析期間被省略。 – Tunaki