2010-09-14 10 views
3

J'ai un référentiel Artifactory local dans lequel j'ai deux pots pour commons-logging: un pour version 1.0.4 et un pour version 1.1.1. J'expérimente en utilisant Ivy pour télécharger l'ancien avec une tâche ant (avec la balise de dépendance appropriée dans ivy.xml), puis je change l'attribut "rev" de cette balise de dépendance en 1.1.1. Lorsque j'utilise ivy: resolve dans ant, ce nouveau pot est téléchargé avec succès dans mon cache, mais le plus ancien n'est pas supprimé automatiquement, et j'aimerais que cela se produise.Ivy suppression d'artefacts indésirables (anciens) du cache Ivy

Je n'arrive pas à comprendre comment procéder après avoir consulté la documentation Ivy; est-ce que quelqu'un sait comment faire pour que Ivy supprime les anciennes versions d'artefacts quand de nouveaux sont téléchargés, soit avec la tâche de résolution ou autre chose?

Répondre

2

Je toujours inclure une cible ANT "realclean" qui purge en plus mon cache ivy.

<target name="clean"> 
    <delete dir="${build.dir}"/> 
</target> 

<target name="realclean" depends="clean"> 
    <ivy:cleancache/> 
</target> 

Doco

+0

Un problème avec ivy: cleancache est qu'il va et supprime le dossier de cache chaque fois qu'il est appelé. Par conséquent, chaque fois que le cache doit être reconstruit. Quel est le contraire de ce que le cache est requis de faire. La création de cache annule le but de l'avantage de performance qu'il doit offrir. –

4

Il n'y a vraiment pas de problème d'avoir le pot "plus" dans votre cache. Si votre projet n'a pas besoin du plus vieux pot, Ivy l'ignorera simplement. Le vieux pot prend environ 50 kilo-octets dans votre système. À l'ère des disques Terabyte, cela ne vaut pas le temps et l'effort de libérer l'espace.

Le cache Ivy est juste cela: Un cache. C'est pour ALL de vos projets qui utilisent Ivy. Si un projet plus ancien requiert la version 1.0.4 du fichier journal de consignation, il sera déjà dans le cache Ivy et ne doit pas être téléchargé, donc, comme une bonne mémoire cache, il vous fait gagner du temps et de l'énergie.

Vous pouvez faire un <ivy:cleancache> mais cela efface vraiment tout votre cache: Tout sera supprimé. Il va se débarrasser de la plus ancienne version 1.0.4 du pot, mais il va aussi se débarrasser de la version 1.1.1 du pot aussi. Bien sûr, Ivy va juste le télécharger la prochaine fois qu'il le demande, mais cela signifie attendre que Ivy télécharge tous vos pots. A propos, c'est un gros problème avec <ivy:cleancache>: Si vous faites plusieurs builds avec Ivy et que l'on nettoie le cache sur vous, vous finirez par casser les autres builds. Normalement, ce n'est pas un problème avec les utilisateurs individuels, mais cela peut être pour un système d'intégration continue.

Si vous regardez la documentation Ivy, il ne dit qu'un <ivy:cleancache> est le même que:

<delete dir="${ivy.cache.dir}" /> 

Vous pouvez l'utiliser comme base pour la suppression des pots plus âgés en utilisant une date selector:

<delete dir="${ivy.cache.dir}"> 
    <date datetime="01/01/2010 12:00 AM" when="before"/> 
    <include name="*.jar"/> 
</delete> 

Cependant, cela utilise le modifié date du pot et non la date à laquelle le fichier a été créé. Ignorez votre répertoire cache Ivy et ne vous inquiétez pas à ce sujet.

Si le cache Ivy devient trop volumineux, vous pouvez le supprimer et Ivy va simplement redéfinir les nouveaux jars si nécessaire.