web-dev-qa-db-fra.com

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

33
Ruediger Keller

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.

30
Joachim Hofer

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.

42
Mark Tye

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
8
opyate

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)
3
Richard Gomes

Emplacement des fichiers Ivy

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.

Paramètres spécifiques à l'utilisateur

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
3
Mark O'Connor
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)

2
Milso

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:

  • Placez un fichier de configuration nommé 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).
  • Appelez le lanceur avec la propriété système supplémentaire sbt.boot.properties défini pour pointer vers votre fichier de configuration.
  • Met le 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.

2
Joachim Hofer