J'utilise SBT comme outil de construction pour construire un projet Scala.
Mon problème est que je ne peux pas configurer SBT pour télécharger les dépendances dans mon répertoire personnel. Par conséquent, je recherche un utilisateur par utilisateur ou encore mieux un paramètre à l'échelle du système pour dire à SBT de mettre le répertoire de cache Ivy ailleurs.
Avec maven, il existe le fichier settings.xml par utilisateur qui peut être utilisé pour configurer le référentiel local.
J'ai lu la question Comment remplacer l'emplacement du cache Ivy? et ses réponses, mais il semble qu'il ne décrit que la configuration du paramètre pour chaque projet.
S'il n'y a pas d'alternative, j'irais pour un paramètre par projet, mais je n'ai pas obtenu la réponse de la question mentionnée pour travailler. Quelques détails supplémentaires seraient les bienvenus, par exemple où placer le fichier ivysettings.xml. Je l'ai mis dans le répertoire racine du projet et cela n'a pas fonctionné.
Vous pouvez simplement ajouter une variable d'environnement à votre script Shell de lancement de sbt:
Java -Dsbt.ivy.home=/tmp/.ivy2/ ...
Voir Library Management dans la documentation officielle.
Le sbt.ivy.home
la propriété n'est que la moitié de la solution. Il contrôle où le lanceur sbt télécharge sbt lui-même (et les dépendances connexes comme le scala, etc.) Comme indiqué par Joachim Hofer, il n'a aucun effet sur l'emplacement des dépendances déclarées par votre projet télécharger.
Pour changer cet emplacement, vous devez définir le ivy.home
propriété. Donc, pour augmenter la première solution de Joachim, vous définiriez les deux propriétés du système:
Java -Dsbt.ivy.home=/tmp/.ivy2/ -Divy.home=/tmp/.ivy2/ -jar `dirname $0`/sbt-launch.jar "$@"
Avec ces propriétés, le lanceur télécharge les dépendances de votre projet et de sbt dans le /tmp/.ivy2/
répertoire. Bien sûr, vous pouvez également les placer dans des répertoires séparés.
Vous devez utiliser sbt-extras si vous ne le faites pas déjà.
Ensuite, c'est simplement un drapeau que vous passez:
sbt -ivy /path/to/.ivy2
Vous pouvez récupérer votre répertoire personnel à l'aide de Path.userHome.absolutePath
, comme illustré 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 illustré ci-dessous:
resolvers += Resolver.file("Local", file( System.getenv("IVY_HOME") + "/whatever/it/is"))(Resolver.ivyStylePatterns)
Je place normalement les fichiers ivy.xml et ivysettings.xml à côté du fichier de construction comme suit:
build.xml
ivy.xml
ivysettings.xml
Les tâches de lierre résoudre et récupérer devraient trouver les deux fichiers.
Par exemple:
<target name="init" description="--> retrieve dependencies with ivy">
<ivy:retrieve pattern="lib/[conf]/[artifact].[ext]"/>
</target>
Bizarre, ça ne marche pas pour toi.
Vous pouvez émuler le fichier de paramètres maven de plusieurs manières
1) inclure une 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 remplacer l'emplacement par défaut en utilisant une propriété ANT
ant -Divy.settings.file=$HOME/.ivy2/my-ivysettings.xml
sbt -ivy /tmp/.ivy2 compile
Référence: man sbt
Options: -ivy path: chemin vers le dépôt Ivy local (par défaut: ~/.ivy2)
Pour modifier l'emplacement du cache pendant le démarrage SBT lui-même, voir Sbt Launcher Configuration dans la documentation officielle.
Fondamentalement, pour le faire fonctionner à l'échelle du système, vous devez:
sbt.boot.properties
quelque part où il est accessible à l'échelle du système (celui par défaut est répertorié sur le lien ci-dessus).sbt.boot.properties
défini pour pointer vers votre fichier de configuration.cache-directory
entrée (dans le [ivy]
section) à l'emplacement de votre cache de lierre.Cependant, cette configuration ne semble pas se répercuter sur une utilisation SBT normale.