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.
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.
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.
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
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
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)
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.
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)