首先,SBT有個工做目錄(默認位於${user.home}/.sbt)
而後,SBT是利用Apache Ivy來管理依賴的,因而又有一個ivy緩存目錄(默認位於${user.home}/.ivy2) java
這兩個目錄默認位於C盤,像我這麼喜歡重裝系統的人,最討厭把東西放在C盤了,因此要想辦法修改這兩個目錄的定位。 shell
方法很簡單,好比咱們要將上述目錄移動到D:\Tools\sbt,只需在環境變量中添加一個變量SBT_OPTS,值爲 緩存
-Dsbt.global.base=D:\Tools\sbt\.sbt -Dsbt.ivy.home=D:\Tools\sbt\.ivy2而後從新運行sbt(若是是經過shift+鼠標右鍵打開的控制檯,那還須要重啓下系統確保環境變量起做用)
=================設置方法很簡單,如下是分析的過程 ide
我用了很長時間,在sbt-launch.jar中的sbt目錄下找到了sbt.boot.properties文件,文件中有以下內容: ui
[boot] directory: ${sbt.boot.directory-${sbt.global.base-${user.home}/.sbt}/boot/} [ivy] ivy-home: ${sbt.ivy.home-${user.home}/.ivy2/} checksums: ${sbt.checksums-sha1,md5} override-build-repos: ${sbt.override.build.repos-false} repository-config: ${sbt.repository.config-${sbt.global.base-${user.home}/.sbt}/repositories}
其中包含了很奇怪的${}語法,不過細細看來也是可以理解的,「-」左邊就是訪問property語法,「-」右邊則指定一個默認值或另外一個表達式。
例如這句話${sbt.ivy.home-${user.home}/.ivy2/}至關於 spa
// 僞碼 ivy-home = if exists("sbt.ivy.home") get("sbt.ivy.home") else if exists("user.home") get("user.home") + "/.ivy2/"經過分析這個文件能夠發現,只須要想辦法修改sbt.global.base和sbt.ivy.home變量便可。一種方式是直接把路徑寫入這個文件,而後壓縮進jar便可。但這種方式顯然是不可取的。另外一種方式,天然是經過VM Options傳入。
接下來就要從sbt.bat入手。bat文件中一大堆腳本,也不太看得懂,不過java啓動命令仍是很清楚的
code
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%jansi.jar;%SBT_HOME%sbt-launch.jar;%SBT_HOME%classes" SbtJansiLaunch %*
其中%SBT_OPTS%在腳本的其餘地方並無用到,同時變量名也指明瞭它是用於配置SBT屬性的,因而就有了上述方法的嘗試,竟然還成功了。 md5