2011-02-28 5 views
15

tout en résolvant mon ivy.xml, j'obtiens une longue liste d'erreurs, toutes indiquant "unknown resolver XYZ". Je connais le résolveur, il est utilisé dans le même projet mais tâche différente. D'après ce que je comprends, le résolveur utilisé pour créer l'entrée de cache est stocké et ne peut pas être déterminé par le résolveur de suivi.recevant le message d'erreur: "résolveur inconnu XYZ"

La question est: comment puis-je éviter cela? Seeams comme ceci n'est pas vraiment une erreur, plus comme un avertissement puisque je suis capable de résoudre toutes les dépendances et continuer la compilation.

Répondre

14

Dans le même projet, le résolveur de build ne changera pas car il est défini dans votre fichier ivysettings.xml.

Ceci est plus susceptible d'être un problème avec un cache ivy périmé. Je suggère d'ajouter une cible supplémentaire qui purge votre cache. Utile lorsque vous rencontrez ce type de problème:

<target name="clean-all" depends="clean" description="Purge ivy cache"> 
    <ivy:cleancache/> 
</target> 
+1

Ce n'est pas correct, le résolveur peut facilement changer. Je peux définir plusieurs résolveurs et les configurer via la balise de module. Vous pouvez également utiliser plusieurs fichiers de paramètres et vous y référer via l'attribut settingsref. –

+0

Oui, bien sûr, vous pouvez. Mon point est que le cache Ivy enregistre beaucoup d'informations liées au résolveur. Il a été mon expérience que ce cache doit être périodiquement purgé, surtout quand je change les paramètres ivy. –

+0

enfin reconnu cette réponse, le nettoyage de la cache fonctionne pour moi. Bien que je nettoie presque à chaque fois, c'est loin d'être optimal. –

3

Exécutez votre build ant avec l'indicateur verbeux (-v). Cela vous donnera un aperçu clair des fichiers de paramètres qui sont utilisés tout au long du processus de résolution. Mon pari est que vous trouverez votre problème assez facilement et ce sera le long des lignes du fichier de paramètres que vous pensiez que vous utilisiez n'est pas utilisé. Dans mes projets, je trouve que ce genre de chose se produit souvent lorsqu'une tâche post-résolution (comme retrieve) déclenche une résolution "automatiquement" et utilise les paramètres ivy par défaut au lieu de celui que je veux utiliser au moment. Les chances sont, votre fichier de paramètres par défaut ne contient pas les résolveurs que vous attendez.

Pour résoudre ces problèmes, je crée un ivysettings-common.xml contenant uniquement des résolveurs. Ensuite, dans chacun de mes fichiers de paramètres, j'importe les paramètres communs et référence les résolveurs dans la chaîne principale. Cela ressemble à:

<ivysettings> 
    <settings defaultResolver="all-repositories" /> 
    <include file="ivysettings-common.xml" /> 
    <resolvers> 
     <chain name="all-repositories" returnFirst="true" > 
       <resolver ref="project" /> 
       <resolver ref="local" /> 
       <resolver ref="hibernate" /> 
       <resolver ref="ibibilo" /> 
     </chain>   
    </resolvers> 
</ivysettings> 

À partir de là, je fais le fichier commun mes paramètres par défaut, juste « en cas d'urgence » Je sais que tous mes résolveurs se trouvent (en ajoutant ce qui suit à ivy.properties):

ivy.settings.file = ${basedir}/path/to/ivysettings-common.xml 

mais je explicitement tous mes appels de lierre au fichier de paramètres appropriés, en essayant de ne jamais compter sur la valeur par défaut parce que la seule raison pour laquelle j'utilise le lierre + fourmi est que je préfère un contrôle précis sur mon processus de construction:

J'espère que tout ce qui vous aide ou quelqu'un d'autre.

~ gMale

+0

Cela semble prometteur, je vais essayer demain. –

Questions connexes