How to configure Ivy cache directory per-user or system-wide?

前端 未结 7 1093
说谎
说谎 2020-12-02 09:38

I am using SBT as my build tool for building a Scala project.

My problem is, I can\'t configure SBT to download dependencies to my user home directory. Therefore I a

相关标签:
7条回答
  • 2020-12-02 09:47

    You can retrieve your home directory using Path.userHome.absolutePath, like shown below:

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

    I suppose that you can also retrieve environment variables using System.getenv and concatenate in the same way, like shown below:

    resolvers += Resolver.file("Local", file( System.getenv("IVY_HOME") + "/whatever/it/is"))(Resolver.ivyStylePatterns)
    
    0 讨论(0)
  • 2020-12-02 09:49
    sbt -ivy /tmp/.ivy2 compile
    

    Reference: man sbt

    Options: -ivy path: path to local Ivy repository (default: ~/.ivy2)

    0 讨论(0)
  • 2020-12-02 09:54

    You should use sbt-extras if you don't do already.

    Then, it's simply a flag you pass it:

    sbt -ivy /path/to/.ivy2
    
    0 讨论(0)
  • 2020-12-02 09:57

    For editing the cache location during the SBT boot itself, see Sbt Launcher Configuration in the official documentation.

    Basically, to get it to work system-wide, you'd have to:

    • Put a configuration file named sbt.boot.properties somewhere where it's accessible system-wide (the default one is listed at the link above).
    • Call the launcher with the additional system property sbt.boot.properties set to point to your configuration file.
    • Set the cache-directory entry (in the [ivy] section) to the location of your ivy cache.

    This configuration doesn't seem to carry over to normal SBT usage, though, unfortunately.

    0 讨论(0)
  • 2020-12-02 10:01

    You can simply add an environment variable to your sbt launch shell script:

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

    See Library Management in the official documentation.

    0 讨论(0)
  • 2020-12-02 10:01

    Location of ivy files

    I normally put the ivy.xml and ivysettings.xml files alongside by build file as follows:

    build.xml
    ivy.xml
    ivysettings.xml
    

    The ivy tasks resolve and retrieve should find both files.

    For example:

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

    Odd, that it's not working for you.

    User specific settings

    You can emulate the maven settings file in a couple of ways

    1) include directive within the project ivysettings.xml

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

    2) Set location from the build file

    <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) I've never tried this but I think you can override the default location using an ANT property

    ant -Divy.settings.file=$HOME/.ivy2/my-ivysettings.xml
    
    0 讨论(0)
提交回复
热议问题