sbt項目構建過慢解決辦法

最近因爲環境遷移的原因需要重新構建一下之前的scala項目,然而被sbt過慢折磨的要死,打了一個多小時遊戲還是卡在同一個進度不動,特地研究了一下處理了一波。

sbt構建過慢原因

sbt是scala項目經常用到的一個工具,主要用於構建等操作。然而,sbt的構建或者初次下載等都需要很長很長的時間,主要原因如下:

  • sbt的所有默認倉庫都設在國外
  • 從某一個版本開始sbt默認使用https訪問倉庫們(據說,有待考證,因爲在sbt的下載過程中看到的仍然是downloading http://balabala
  • 由於衆所周知的原因,通往國外的https鏈接十分不穩定
  • sbt並沒有設置斷網重試機制

因此,sbt在下載的過程中會很慢並且經常會卡住不動。

解決方法

解決方法主要有兩種:

  • 使用代理
  • 修改默認倉庫,使用國內鏡像資源

然而,使用了這幾種方法之後仍然會經常卡住,具體原因不詳,解決辦法爲簡單粗暴的ctrl+c人工手動重傳,原理仍然不詳,如有了解的話求告知

使用代理

使用代理的時候注意需要設置命令行代理,使用圖形化設置全局代理取決於操作系統和桌面環境的具體實現,有時不一定能夠成功

對於命令行代理設置http代理方法如下:

  • windows
set http_proxy=http://%proxy%:%port%
set http_proxy_user=%username%
set http_proxy_pass=%passwd%
  • linux
export http_proxy=$username:$passwd@$proxy:$prot

設置vpn代理的方式可以看這裏(TODO:引用)

然而個人測試的話使用了http代理依然會卡住,特別是對於大文件而言,通常需要ctrl+c許多次而且每次都要等上十分鐘以上纔敢ctrl+c,不過vpn代理十分好用,強烈推薦。

使用國內鏡像庫

不得不說世界上還是好人多,國內許多人爲我們提供了方便使用的各種代理鏡像庫(以及捐款鏈接們),總之有條件的話還是可以捐一下

具體方法如下:修改~/.sbt/repositories(沒有的話自行創建),添加[repositories]標籤並在其下設置全局鏡像即可,更多可參照官方文檔中的語法說明

簡單地說就是一些如下形式的字符串,sbt會從上到下一個一個的進行查詢,name可以自己隨意設定,proxy-address是鏡像庫的地址

name: http://proxy-address

之後推薦幾個比較好用的鏡像庫,一個是oschina的,也就是百度出來最多的一種設置,整個配置文件大致如下,,然而實測下來oschina的源並不好用,很多時候都會被他卡死:

[repositories]
local
osc: http://maven.oschina.net/content/groups/public/
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sonatype-oss-releases
maven-central
sonatype-oss-snapshots

然而,我在本地測試的結果是oschina的庫仍然有許多問題,這裏推薦另一個鏡像庫,使用了他們自己的服務器(github)進行搭建,核心思想repox幫助你從上游查找,是若無法從上游拿到合適的jar包的話就儘快想辦法讓sbt fail掉,並且爲廣大用戶提供了一個公服,掛載在了阿里雲上面,更新十分及時,具體介紹頁面在這裏

在配置文件中較高優先級的位置添加如下鏡像庫,並且去除掉所有其他的鏡像庫即可:

repox-maven: http://repox.gtan.com:8078/
repox-ivy: http://repox.gtan.com:8078/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]

實際測試中使用gtan家的鏡像庫效果比oschina好許多,雖然仍然需要偶爾手動ctrl+c,但總體下載速度已經可以接受了。

結語

最終的解決辦法是使用了gtan的源和系統自帶的其他源們,掛上了代理,並且在出現fail時用瀏覽器打開fail的地址之後fail的文件下載下來,然後重新運行sbt,一般都會暢通,原理不是很確定,十分玄學,如有確定求告知,感謝。

不得不說雖然存在下載速度等問題,如同sbt,maven甚至apt這類的依賴管理工具真是大大的減輕了項目管理的負擔,推薦大家使用。特別是maven,下載時相較sbt要順暢許多。

最後,問候sbt和g**** ***l

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章