我使用SBT作为构建Scala项目的构建工具 .
我的问题是,我无法配置SBT将依赖项下载到我的用户主目录 . 因此,我正在寻找一个每用户甚至更好的系统范围设置来告诉SBT将Ivy缓存目录放在其他地方 .
使用maven,可以使用每用户settings.xml来配置本地存储库 .
我已经阅读了问题How to override the location of Ivy’s Cache?并且它是答案,但它似乎只描述了如何在每个项目的基础上配置设置 .
如果没有其他选择,我会选择每个项目设置,但我没有从上述问题得到答案 . 更多细节将是最受欢迎的,例如放置ivysettings.xml的位置 . 我将它放入项目的根目录,但它不起作用 .
7 回答
您只需将环境变量添加到sbt launch shell脚本:
请参阅官方文档中的Library Management .
sbt.ivy.home
属性只是解决方案的一半 . 它控制sbt启动程序下载sbt本身的位置(以及scala编译器和库等相关依赖项)正如Joachim Hofer所述,它对下载项目声明的依赖项的位置没有影响 .要更改该位置,您必须设置
ivy.home
属性 . 因此,为了增加Joachim的第一个解决方案,您需要设置两个系统属性:使用这些属性,启动程序会将项目's and sbt'的依赖项下载到
/tmp/.ivy2/
目录 . 当然,您也可以将它们放在不同的目录中 .如果你还没有,你应该使用sbt-extras .
然后,它只是你传递它的旗帜:
常 Spring 藤文件的位置
我通常将ivy.xml和ivysettings.xml文件放在构建文件旁边,如下所示:
常 Spring 藤任务解析和检索应该找到两个文件 .
例如:
奇怪,它不适合你 .
用户特定设置
您可以通过几种方式模拟maven设置文件
1)在项目ivysettings.xml中包含指令
2)从构建文件中设置位置
3)我从未尝试过这个,但我认为你可以使用ANT属性覆盖默认位置
您可以使用
Path.userHome.absolutePath
检索主目录,如下所示:我想您也可以使用
System.getenv
检索环境变量并以相同的方式连接,如下所示:要在SBT引导期间编辑缓存位置,请参阅官方文档中的Sbt Launcher Configuration .
基本上,要让它在系统范围内工作,您必须:
将名为
sbt.boot.properties
的配置文件放在系统范围内可访问的位置(默认值列在上面的链接中) .使用附加系统属性
sbt.boot.properties
设置为指向配置文件来调用启动程序 .将
cache-directory
条目(在[ivy]
部分中)设置为常 Spring 藤缓存的位置 .不幸的是,这种配置似乎没有延续到正常的SBT使用 .
参考:man sbt