首页 文章

如何为每个用户或系统范围配置常 Spring 藤缓存目录?

提问于
浏览
31

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

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

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

我已经阅读了问题How to override the location of Ivy’s Cache?并且它是答案,但它似乎只描述了如何在每个项目的基础上配置设置 .

如果没有其他选择,我会选择每个项目设置,但我没有从上述问题得到答案 . 更多细节将是最受欢迎的,例如放置ivysettings.xml的位置 . 我将它放入项目的根目录,但它不起作用 .

7 回答

  • 2

    您只需将环境变量添加到sbt launch shell脚本:

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

    请参阅官方文档中的Library Management .

  • 3

    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 "$@"
    

    使用这些属性,启动程序会将项目's and sbt'的依赖项下载到 /tmp/.ivy2/ 目录 . 当然,您也可以将它们放在不同的目录中 .

  • 8

    如果你还没有,你应该使用sbt-extras .

    然后,它只是你传递它的旗帜:

    sbt -ivy /path/to/.ivy2
    
  • 2

    常 Spring 藤文件的位置

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

    build.xml
    ivy.xml
    ivysettings.xml
    

    常 Spring 藤任务解析和检索应该找到两个文件 .

    例如:

    <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
    
  • 42

    您可以使用 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)
    
  • 3

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

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

    • 将名为 sbt.boot.properties 的配置文件放在系统范围内可访问的位置(默认值列在上面的链接中) .

    • 使用附加系统属性 sbt.boot.properties 设置为指向配置文件来调用启动程序 .

    • cache-directory 条目(在 [ivy] 部分中)设置为常 Spring 藤缓存的位置 .

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

  • 30
    sbt -ivy /tmp/.ivy2 compile
    

    参考:man sbt

    选项:-ivy path:本地常 Spring 藤存储库的路径(默认值:〜/ .ivy2)

相关问题