修改SBT默認緩存路徑

首先,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

相關文章
相關標籤/搜索