Comment configurer le répertoire de cache Ivy par utilisateur ou à l'échelle du système?

j'utilise SBT comme outil de construction pour construire un projet Scala.

mon problème est, Je ne peux pas configurer SBT pour télécharger des dépendances dans mon répertoire utilisateur. Par conséquent, je suis à la recherche d'un paramètre par utilisateur ou encore mieux d'un paramètre à l'échelle du système pour dire à SBT de mettre le répertoire cache D'Ivy ailleurs.

avec maven Il ya les paramètres par utilisateur.xml qui peut être utilisé pour configurer le référentiel local.

j'ai lu la question comment modifier l'emplacement du Cache D'Ivy? et ses réponses, mais il semble qu'il ne décrit que la façon de configurer le paramètre sur une base de projet.

s'il n'y avait pas d'alternative, j'opterais pour un cadre par projet, mais je n'ai pas obtenu la réponse de la question mentionnée pour travailler. Un peu plus de détails serait le bienvenu, par exemple, où mettre la ivysettings.XML. Je l'ai mis dans le répertoire racine du projet et il n'a pas de travail.

29
demandé sur Community 2010-06-29 20:50:05

7 réponses

vous pouvez simplement ajouter une variable d'environnement à votre script shell de lancement de sbt:

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

voir gestion de bibliothèque dans la documentation officielle.

30
répondu Joachim Hofer 2018-02-16 18:07:12

la propriété sbt.ivy.home n'est que la moitié de la solution. Il contrôle où le lanceur sbt télécharge le sbt lui-même (et les dépendances connexes comme le compilateur et la bibliothèque scala, etc. Comme L'a noté Joachim Hofer, cela n'a aucun effet sur l'endroit où les dépendances déclarées par votre projet sont téléchargées.

pour changer que emplacement, vous devez définir la propriété ivy.home . Donc, pour augmenter la première solution DE Joachim, vous définiriez les deux systèmes propriétés:

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

avec ces propriétés, le lanceur téléchargera les dépendances de votre projet et de sbt dans le répertoire /tmp/.ivy2/ . Bien sûr, vous pouvez les mettre dans des répertoires distincts.

41
répondu Mark Tye 2011-11-05 02:26:13

vous devez utiliser sbt-extras si vous ne le faites pas déjà.

alors, c'est simplement un drapeau que vous passez:

sbt -ivy /path/to/.ivy2
8
répondu opyate 2013-12-09 07:35:45

localisation des fichiers ivy

je mets habituellement le ivy.xml et ivysettings.fichiers xml accompagnés du fichier build comme suit:

build.xml
ivy.xml
ivysettings.xml

Le lierre tâches résoudre et récupérer doit trouver les deux fichiers.

par exemple:

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

Étrange, qu'il ne fonctionne pas pour vous.

paramètres spécifiques à l'utilisateur

vous pouvez émuler le fichier de paramètres maven de plusieurs façons

1) inclure la directive dans le projet ivysettings.xml

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

2) Définir l'emplacement à partir du fichier de construction

<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) Je n'ai jamais essayé cela, mais je pense que vous pouvez outrepasser l'emplacement par défaut en utilisant une propriété ANT

ant -Divy.settings.file=$HOME/.ivy2/my-ivysettings.xml
3
répondu Mark O'Connor 2010-06-30 20:13:45

vous pouvez récupérer votre répertoire personnel en utilisant Path.userHome.absolutePath , comme montré ci-dessous:

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

je suppose que vous pouvez également récupérer des variables d'environnement en utilisant System.getenv et concaténer de la même manière, comme montré ci-dessous:

resolvers += Resolver.file("Local", file( System.getenv("IVY_HOME") + "/whatever/it/is"))(Resolver.ivyStylePatterns)
3
répondu Richard Gomes 2014-03-04 15:21:11

pour éditer l'emplacement du cache pendant le boot SBT lui-même, voir configuration du lanceur Sbt dans la documentation officielle.

en gros, pour qu'il fonctionne à l'échelle du système, il faudrait:

  • placez un fichier de configuration nommé sbt.boot.properties quelque part où il est accessible à l'échelle du système (le fichier par défaut est indiqué au lien ci-dessus).
  • appelez le lanceur avec le système supplémentaire propriété sbt.boot.properties définie pour pointer vers votre fichier de configuration.
  • définit l'entrée cache-directory (dans la section [ivy] ) à l'emplacement de votre cache ivy.

cette configuration ne semble pas se reporter à L'utilisation normale de SBT, bien que, malheureusement.

2
répondu Joachim Hofer 2014-12-22 20:24:01
sbt -ivy /tmp/.ivy2 compile

la Référence: l'homme sbt

Options: -ivy chemin: chemin d'accès aux locaux de Lierre référentiel (par défaut: ~/.ivy2)

2
répondu Milso 2017-07-21 11:40:31