1. 程式人生 > >加速 SBT 下載依賴庫的速度

加速 SBT 下載依賴庫的速度

SBT翻牆手冊:http://afoo.me/posts/2014-11-05-how-make-sbt-jump-over-GFW.html

根據 SBT 的官網文件中 Proxy Repositories 部分的描述, 可以通過改變repositories 的 url 列表來優化.

配置國內代理庫

[repositories]
  local
  oschina:http://maven.oschina.net/content/groups/public/ 

若你知道其他更快的映象庫, 同上配置.一般網際網路企業部署了供內部使用的映象庫(如 nexus ), 也可以配置於此.

相容 Ivy 路徑佈局

大多數中心倉庫(repository)是 Maven 的路徑佈局, 這就導致 SBT 的外掛和部分 Ivy依賴無法從其下載.

[repositories]
  local
  oschina:http://maven.oschina.net/content/groups/public/ 
  oschina-ivy:http://maven.oschina.net/content/groups/public/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] 

精簡 url 列表

遠端倉庫越多越全, 可以基本避免下載不到的問題. 但是, 也可能讓下載的時間更長, 讓你不願在等待而放棄下載.

因為, 下載過程中 SBT 會序列的 "詢問" 列表中所有的遠端倉庫, 無論是否找得到.

當依賴樹越大, 整個下載的過程就更漫長. 若再遇到響應慢的倉庫, 情況惡化的令人髮指.

推薦列表策略是:

  • 本地倉庫
  • 國內(或內網)映象倉庫
  • 國外官方倉庫, 通常 # 註釋掉, 待上面不管用時, 去掉 # 再做嘗試

上面辦法不管用

我建議使用你熟悉的網路嗅探手段查清具體原因, 對症下藥了.

一個可行的方案

  1. 下載 HTTP 代理工具 mitmproxy , 並執行它
  2. 啟動 SBT 時, 附加引數 -Dhttp.proxyHost=loalhost -Dhttp.proxyPort=8080 , 這會將 SBT 所有的 HTTP 請求經由 mitmproxy 轉發
  3. 通過 mitmproxy 來分析 HTTP 請求失敗的具體原因