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
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)
sbt -ivy /tmp/.ivy2 compile
Reference: man sbt
Options: -ivy path: path to local Ivy repository (default: ~/.ivy2)
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
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:
sbt.boot.properties
somewhere where it's accessible system-wide (the default one is listed at the link above).sbt.boot.properties
set to point to your configuration file.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.
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.
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.
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