Scala 将sbt配置为不使用用户主目录

Scala 将sbt配置为不使用用户主目录,scala,sbt,Scala,Sbt,上周,我们在CI服务器上更改了用户目录权限,并且我们不再具有对用户主目录的写入权限。因此,sbt无法启动,因为它无法使用以下堆栈跟踪写入~/.ivy等 java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:1006) at xsbt.boot

上周,我们在CI服务器上更改了用户目录权限,并且我们不再具有对用户主目录的写入权限。因此,sbt无法启动,因为它无法使用以下堆栈跟踪写入
~/.ivy

java.io.IOException: No such file or directory
  at java.io.UnixFileSystem.createFileExclusively(Native Method)
  at java.io.File.createNewFile(File.java:1006)
  at xsbt.boot.Locks$.apply0(Locks.scala:34)
  at xsbt.boot.Locks$.apply(Locks.scala:28)
  at xsbt.boot.Launch.locked(Launch.scala:238)
  at xsbt.boot.Launch.app(Launch.scala:147)
  at xsbt.boot.Launch.app(Launch.scala:145)
  at xsbt.boot.Launch$.run(Launch.scala:102)
  at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35)
  at xsbt.boot.Launch$.launch(Launch.scala:117)
  at xsbt.boot.Launch$.apply(Launch.scala:18)
  at xsbt.boot.Boot$.runImpl(Boot.scala:41)
  at xsbt.boot.Boot$.main(Boot.scala:17)
  at xsbt.boot.Boot.main(Boot.scala)
 Error during sbt execution: java.io.IOException: No such file or directory
我知道我们可以设置少量sbt变量,例如。我还没有找到我们可以配置的所有变量的最终列表,否则默认为user home的子目录。我还没有找到一种设置默认根目录的方法,这反过来会影响所有这些变量


有人能指出如何配置sbt,使其不使用用户的主目录来存放任何文件吗?

如果您想在其他位置运行.ivy,并且您正在使用sbt extras引导脚本,那么您应该能够执行以下操作:

sbt -ivy /path/to/ivy package

它会将所有ivy文件下载到指定的位置,并运行您需要的任何命令(在本例中,
package

您可以在使用sbt extras时设置
-ivy
(更好),或者您可以使用JVM属性:

-Dsbt.ivy.home=/path/to/ivy
我也用过这个:

-Divy.default.ivy.user.dir=/path/to/ivy

其他答案中提到的常春藤路径选项是解决方案的一部分。正如中所指出的,您需要为sbt本身和项目设置常春藤。此外,正如我在上所发现的,sbt还需要另一个目录来存放自己的东西

总之,我使用了以下三个jvm属性,以便为sbt使用用户主目录的所有内容使用项目的相对路径:

-Dsbt.global.base=./.sbt/ 
-Dsbt.ivy.home=./.ivy2/ 
-Divy.home=./.ivy2/ 
至少从sbt 0.13.9开始,这是需要的。

也许这会有所帮助