37

我使用SBT作为构建 Scala 项目的构建工具。

我的问题是,我无法配置 SBT 将依赖项下载到我的用户主目录。因此,我正在寻找每个用户甚至更好的系统范围设置来告诉 SBT 将 Ivy 缓存目录放在其他地方。

使用 maven,可以使用每个用户的 settings.xml 来配置本地存储库。

我已阅读问题如何覆盖常春藤缓存的位置?它是答案,但它似乎只描述了如何在每个项目的基础上配置设置。

如果没有其他选择,我会选择按项目设置,但我没有从提到的问题中得到答案。欢迎提供更多详细信息,例如放置 ivysettings.xml 的位置。我把它放到项目的根目录下,还是不行。

4

7 回答 7

48

sbt.ivy.home财产只是解决方案的一半。它控制 sbt 启动器下载 sbt 本身的位置(以及相关的依赖项,如 scala 编译器和库等)。正如 Joachim Hofer 所指出的,它对项目声明的依赖项的下载位置没有影响。

要更改位置,您必须设置该ivy.home属性。因此,为了增强 Joachim 的第一个解决方案,您将设置两个系统属性:

java -Dsbt.ivy.home=/tmp/.ivy2/ -Divy.home=/tmp/.ivy2/ -jar `dirname $0`/sbt-launch.jar "$@"

使用这些属性,启动器会将您的项目和 sbt 的依赖项下载到/tmp/.ivy2/目录中。当然,您也可以将它们放在单独的目录中。

于 2011-11-05T02:26:13.393 回答
32

您可以简单地将环境变量添加到您的 sbt 启动 shell 脚本中:

java -Dsbt.ivy.home=/tmp/.ivy2/ ...

请参阅官方文档中的图书馆管理

于 2010-08-01T11:52:14.457 回答
8

如果你还没有这样做,你应该使用sbt-extras 。

然后,它只是你传递它的一个标志:

sbt -ivy /path/to/.ivy2
于 2013-12-09T07:35:45.437 回答
3

您可以使用 检索主目录Path.userHome.absolutePath,如下所示:

resolvers += Resolver.file("Local", file( Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns)

我想您也可以使用System.getenv相同的方式使用和连接检索环境变量,如下所示:

resolvers += Resolver.file("Local", file( System.getenv("IVY_HOME") + "/whatever/it/is"))(Resolver.ivyStylePatterns)
于 2014-03-04T15:15:56.623 回答
3

ivy 文件的位置

我通常将ivy.xmlivysettings.xml文件放在构建文件旁边,如下所示:

build.xml
ivy.xml
ivysettings.xml

ivy 任务解析检索应该找到这两个文件。

例如:

<target name="init" description="--> retrieve dependencies with ivy">
    <ivy:retrieve pattern="lib/[conf]/[artifact].[ext]"/>
</target>

奇怪,它不适合你。

用户特定设置

您可以通过几种方式模拟 Maven 设置文件

1) 在项目ivysettings.xml中包含指令

<ivysettings>
    <include file="${user.home}/.ivy2/my-ivysettings.xml"/>
</ivysettings>

2)从构建文件中设置位置

<target name="init" description="--> retrieve dependencies with ivy">
    <ivy:settings file="${user.home}/.ivy2/my-ivysettings.xml" />
    <ivy:retrieve pattern="lib/[conf]/[artifact].[ext]"/>
</target>

3)我从未尝试过,但我认为您可以使用 ANT 属性覆盖默认位置

ant -Divy.settings.file=$HOME/.ivy2/my-ivysettings.xml
于 2010-06-30T20:13:45.900 回答
2

要在 SBT 引导期间编辑缓存位置,请参阅官方文档中的Sbt Launcher Configuration

基本上,要让它在系统范围内工作,您必须:

  • 将一个名为的配置文件sbt.boot.properties放在系统范围内可访问的某个位置(默认文件在上面的链接中列出)。
  • 调用启动器并将附加系统属性sbt.boot.properties设置为指向您的配置文件。
  • cache-directory条目(在该[ivy]部分中)设置为您的常春藤缓存的位置。

然而,不幸的是,这种配置似乎并没有延续到正常的 SBT 使用。

于 2010-11-08T09:39:36.997 回答
2
sbt -ivy /tmp/.ivy2 compile

参考:man sbt

选项:-ivy 路径:本地 Ivy 存储库的路径(默认值:~/.ivy2)

于 2017-07-21T11:40:31.750 回答