天天看點

maven、gradle 中依賴的 scope 含義

解釋

maven、gradle 中依賴的 scope 可以簡單梳理成4個方面

  1. 支援自身編譯
  2. 支援自身運作
  3. 支援子項目編譯
  4. 支援子項目運作

以上4個方面可以進行各種組合(maven項目)

  • 1:provided(自身編譯要用,運作時不需要,因為其它平台會自動提供,如 servlet)
  • 2:runtime+option:true(不參與編譯,但是運作時對調用,比如方法内部使用的類就不需要參與編譯),子項目可以不需要此功能時。這個組合少有
  • 1、2:compile+option:true(自身編譯運作都要,子項目可以不需要此功能時。這個組合少有)
  • 1、3:沒有
  • 1、4:沒有
  • 2、3:runtime+sub-provided(應該沒有這個搭配)
  • 2、4:runtime+(sub-compile or sub-runtime)(此項目和其子項目都隻在運作期用上)
  • 1、2、3:compile+sub-provided(應該沒有)
  • 1、2、4:compile+sub-runtime(子項目編譯期不需要,運作時會調用)
  • 2、3、4:沒有
  • 1、2、3、4:compile+sub-compile

以上4個方面可以進行各種組合(gradle項目)

  • 1:compileOnly 或 compileClasspath
  • 2:runtimeClasspath
  • 1、2:沒有
  • 1、3:compileOnlyApi
  • 1、4:沒有
  • 2、3:沒有
  • 2、4:沒有
  • 1、2、3:沒有
  • 1、2、4:implementation(子項目編譯期得不到,運作時可以調用,接口實作類!)
  • 2、3、4:沒有
  • 1、2、3、4:api(接口)

gradle 各個 configuration 的繼承關系

下圖中相關解釋:

compileClasspath:本項目編譯期可用

runtimeClasspath:本項目運作期可用

runtimeElements:依賴傳遞到子子產品,且隻傳遞到子子產品的 運作期

apiElements:依賴傳遞到子子產品,且隻傳遞到子子產品的 編譯期

其它:就是以上 4 個配置功能的組合了

maven、gradle 中依賴的 scope 含義

以下是測試階段可用的配置

testCompileClasspath:僅用于測試階段的編譯期

testRuntimeClasspath:僅用于測試階段的運作期

其它:就是以上 2 個配置功能的組合了

maven、gradle 中依賴的 scope 含義