2 votes

Ivy : Installer toutes les dépendances dans un dépôt partagé

Comme le titre l'indique, il s'agit de Ivy que nous utilisons pour la résolution des dépendances pour les projets Java, principalement. Nous venons de mettre en place Ivy, donc il se peut que je ne sache pas tout.

Voici mon problème : Disons que j'ai un module A qui dépend de B, C, D, E et ainsi de suite. Je sais que je peux publier le module A facilement sur mon dépôt partagé. Cela fonctionne. Ce que je veux, c'est qu'Ivy copie tous les modules dont dépend le module A depuis leurs dépôts publics vers notre dépôt partagé. J'ai vérifié le ivy:install ce qui n'est pas exactement ce que je veux (ou peut-être ai-je mal compris comment cela fonctionne). Le site exemple dit :

<ivy:install organisation="apache" module="commons-lang" revision="2.0" from="ivyrep" to="myfsresolver"/>

El from y to sont obligatoires et d'après l'exemple, je suppose que cela fonctionne pour une dépendance qui se trouve dans un dépôt connu et qui a une révision spécifique. Et je devrais écrire une tâche ANT qui installe explicitement chaque dépendance séparément.

Ce dont j'ai besoin, c'est de dire à Ivy - Effectuer la résolution - Publier/installer toutes les dépendances trouvées avec leur nom, leur révision depuis leur dépôt source où elles ont été découvertes vers mon dépôt partagé.

Ainsi, le to pourrait avoir un sens, probablement un attribut conf mais pas l'attribut name , revision y from .

Donc, je cherche une tâche du genre

<ivy:install to="shared"/>

qui installera transitoirement toutes les dépendances (même en excluant le module dépendant lui-même) dans mon dépôt partagé afin que nous puissions construire même sans connexion internet ou lorsqu'un dépôt public est fermé.

3voto

Philipp Wendler Points 4590

Ce n'est pas la meilleure solution, mais ce qui fonctionnerait probablement est d'utiliser 2 dépôts.

Utilisez le premier dépôt pour publier votre module A, et ensuite utilisez ivy pour copier A et toutes ses dépendances vers le second dépôt. Pour cela, vous pouvez utiliser la fonction install tâche. Dans le from attribut que vous donneriez à un résolveur de chaîne qui pointe à la fois vers le premier référentiel et le référentiel public, et dans l'onglet to que vous attribuez à votre référentiel partagé.

Je n'ai pas utilisé Ivy dans une telle configuration, mais nous utilisons avec succès install pour copier des artefacts incluant toutes leurs dépendances transitives d'un dépôt public vers notre propre dépôt, donc je ne vois pas pourquoi cela ne pourrait pas fonctionner.

2voto

jaw Points 132

Ceci est basé sur la réponse de Philipp et mon commentaire illisible. Je voulais juste donner quelques exemples. J'ai toujours build-ivy.xml que j'inclus dans chaque projet build.xml . Cette construction commune script contient les tâches suivantes, qui sont nécessaires pour installer le module, y compris les dépendances, dans votre référentiel partagé.

Cela va lire le ivy.xml pour remplir les variables.

<target name="init">
    <ivy:settings file="${env.IVY_SETTINGS}/ivysettings.xml"/>
    <ivy:info/>
</target>

La tâche suivante dépend de diverses tâches de nettoyage, de compilation, d'empaquetage, etc. que vous devez mettre en œuvre vous-même.

<target depends="init,clean-build,clean-dist,dist,package-doc,package-sources" name="publish-local">
    <ivy:resolve/>
    <ivy:publish status="release" resolver="local" overwrite="true" >
        <artifacts pattern="${dist.dir}/[artifact]-[revision](-[classifier]).[ext]"/>
    </ivy:publish>
</target>

Cette tâche va maintenant installer le module actuel, y compris les dépendances, de manière transitive dans le référentiel de partage.

<target name="install" depends="publish-local">
    <ivy:install module="${ivy.module}" from="local" to="shared" organisation="${ivy.organisation}" revision="${ivy.revision}" overwrite="true" transitive="true"/>
</target>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X