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