1. 相依性管理流程

相依性管理流程 

有一個關於函式庫管理的入門頁面,您可能需要先閱讀它。

此頁面說明了 compile 任務與函式庫相依性管理之間的關係。

背景 

update 會根據建置檔案中的設定(例如 libraryDependenciesresolvers)解析相依性。其他任務會使用 update 的輸出(UpdateReport)來形成各種類別路徑。反過來使用這些類別路徑的任務(例如 compilerun)因此間接地依賴 update。這表示在執行 compile 之前,需要先執行 update 任務。但是,在每次 compile 時都解析相依性會不必要地緩慢,因此 update 必須特別注意何時實際執行解析。

此外,sbt 1.x 引入了函式庫管理 API (LM API) 的概念,它抽象了函式庫管理的概念。從 sbt 1.3.0 開始,LM API 有兩種實作方式:一種基於 Coursier,另一種基於 Apache Ivy。

快取和設定 

  1. 如果自上次成功解析以來,沒有函式庫相依性設定發生變更,且檢索到的檔案仍然存在,則 sbt 不會要求相依性解析器(例如 Coursier)執行解析。
  2. 變更設定(例如新增或移除相依性,或變更相依性的版本或其他屬性)會自動導致執行解析。
  3. 直接執行 update 任務(而不是依賴它的任務)將強制執行解析,無論設定是否變更。
  4. 執行 clean 清除任務快取也會導致執行解析。
  5. 覆寫上述所有內容,update / skip := true 會告訴 sbt 永遠不要執行解析。請注意,這可能會導致依賴任務失敗。

關於 SNAPSHOT 的注意事項 

建置的可重複性至關重要,尤其是在您與其他人共用建置時。SNAPSHOT 版本是一種方便在本機測試某些東西的方式,但其使用應僅限於本機,因為它會將可變性引入建置,這會使其變得脆弱,並且由於必須透過網路檢查發佈日期,即使成品在本機快取中,也會使相依性解析變慢。

預設情況下,Coursier 中的 SNAPSHOT 成品會被賦予 24 小時的存活時間 (TTL),以避免網路 IO。如果您需要強制重新解析 SNAPSHOTS,請使用設定為 0sCOURSIER_TTL 環境變數執行 sbt。