修改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

相关文章
相关标签/搜索