scala sbt ivy

scala - ¿Cómo configurar el directorio de caché Ivy por usuario o todo el sistema?



sbt (7)

Estoy utilizando SBT como mi herramienta de compilación para construir un proyecto de Scala.

Mi problema es que no puedo configurar SBT para descargar dependencias al directorio de inicio de mi usuario. Por lo tanto, estoy buscando un ajuste por usuario o incluso mejor para todo el sistema para decirle a SBT que coloque el directorio de caché de Ivy en otro lugar.

Con maven está el settings.xml por usuario que se puede usar para configurar el repositorio local.

He leído la pregunta ¿Cómo anular la ubicación de Ivy''s Cache? y sus respuestas, pero parece que solo describe cómo configurar la configuración por proyecto.

Si no hay alternativa, elegiría una configuración por proyecto, pero no obtuve la respuesta de la pregunta mencionada para trabajar. Algunos detalles más serían bienvenidos, por ejemplo, dónde poner el ivysettings.xml. Lo puse en el directorio raíz del proyecto y no funcionó.


Ubicación de los archivos de hiedra

Normalmente coloco los archivos ivy.xml y ivysettings.xml junto al archivo de compilación de la siguiente manera:

build.xml ivy.xml ivysettings.xml

Las tareas de ivy resolver y recuperar deben encontrar ambos archivos.

Por ejemplo:

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

Extraño, que no está funcionando para ti.

Configuración específica del usuario

Puedes emular el archivo de configuración maven de varias maneras

1) incluir directiva dentro del proyecto ivysettings.xml

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

2) Establecer la ubicación desde el archivo de compilación

<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) Nunca he intentado esto, pero creo que puedes anular la ubicación predeterminada usando una propiedad ANT

ant -Divy.settings.file=$HOME/.ivy2/my-ivysettings.xml


Debería usar sbt-extras si no lo hace.

Entonces, es simplemente una bandera que lo pasas:

sbt -ivy /path/to/.ivy2


La propiedad sbt.ivy.home es solo la mitad de la solución. Controla dónde el iniciador sbt descarga sbt en sí (y dependencias relacionadas como el compilador scala y la biblioteca, etc.) Como señaló Joachim Hofer, no tiene ningún efecto sobre dónde se descargan las dependencias declaradas por su proyecto.

Para cambiar esa ubicación, debe establecer la propiedad ivy.home . Entonces, para aumentar la primera solución de Joachim, establecería ambas propiedades del sistema:

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

Con estas propiedades, el iniciador descargará las dependencias de su proyecto y de sbt al directorio /tmp/.ivy2/ . Por supuesto, puedes ponerlos en directorios separados también.


Para editar la ubicación de la memoria caché durante el arranque SBT, consulte Configuración del Lanzador de Sbt en la documentación oficial.

Básicamente, para que funcione en todo el sistema, tendrías que:

  • Coloque un archivo de configuración llamado sbt.boot.properties algún lugar accesible para todo el sistema (el predeterminado se encuentra en el enlace de arriba).
  • Llame al sbt.boot.properties con la propiedad de sistema adicional sbt.boot.properties configurada para apuntar a su archivo de configuración.
  • Establezca la entrada del cache-directory (en la sección [ivy] ) en la ubicación de su caché ivy.

Sin embargo, esta configuración no parece trasladarse al uso normal de SBT, desafortunadamente.


Puede recuperar su directorio de inicio usando Path.userHome.absolutePath , como se muestra a continuación:

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

Supongo que también puede recuperar variables de entorno usando System.getenv y concatenar de la misma manera, como se muestra a continuación:

resolvers += Resolver.file("Local", file( System.getenv("IVY_HOME") + "/whatever/it/is"))(Resolver.ivyStylePatterns)


Simplemente puede agregar una variable de entorno a su script de shell de lanzamiento sbt:

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

Consulte Gestión de bibliotecas en la documentación oficial.


sbt -ivy /tmp/.ivy2 compile

Referencia: hombre sbt

Opciones: -ivy ruta: ruta al repositorio Ivy local (predeterminado: ~ / .ivy2)