2010-07-14 5 views
1

Dans mon script Gradle (version 0.8), j'ai un référentiel ivy local que j'utilise pour publier une bibliothèque, et je n'arrive pas à demander à Gradle d'ignorer son cache. Je suis en train d'accéder au repo local ivy. en fonction de la recommandation du manuel Gradle. Voici le code pertinent (avec certaines variables renommées).Dans Gradle, comment ignorer le cache pour un référentiel Ivy local?

dependencies{ 
    // [several remote dependencies] 
    // ... 

    compile('myorg:mylib:0.1.0') 
} 

def ivy_repo = new org.apache.ivy.plugins.resolver.FileSystemResolver() 
ivy_repo.name = 'ivy-repo' 
ivy_repo.addIvyPattern local_repository + '/ivy/[organisation]/'+ 
    '[module]-ivy-[revision].xml' 
ivy_repo.addArtifactPattern local_repository + '/ivy/[organisation]/'+ 
    '[module]-[revision](-[classifier]).[ext]' 
ivy_repo.descriptor = 'optional' 
ivy_repo.checkmodified = true 

repositories{ 
    // [several remote repositories] 
    // ... 

    add(ivy_repo) 
} 

Mon problème est que quand je lance mon script, une fois que les bibliothèques locales sont résolus, les appels suivants au script de compilation utilisent le répertoire ~/.gradle/cache/myorg: mylib /, plutôt que l'emplacement de mon dépôt local de lierre. Le manuel de Gradle a seulement quelques lignes mentionnant que les dépôts locaux par défaut ne devraient pas utiliser le cache, mais j'ai trouvé maintenant moyen d'indiquer que mon dépôt est 'default' et local et donc ne devrait pas utiliser le cache.

J'ai essayé de définir ivy_repo.local = true, ou en utilisant compile ('myorg: mylib: 0.1.0') {changing = true}, mais aucun ne semble fonctionner. Je ne veux pas utiliser un dépôt flatDir car la librairie locale a des dépendances que mon projet doit trouver (et j'utilise le fichier ivy associé à la librairie locale pour le faire maintenant, et il semble que un référentiel flatDir ignore ces sortes de fichiers ... ou peut-être que je faisais quelque chose de mal là-bas?)

Quelqu'un connait une solution? Ou peut-être un meilleur moyen d'accomplir ma tâche avec Gradle?

Répondre

0

Tout résolveur de lierre a une méthode Resolver.setRepositoryCacheManager(). Il prend un RepositoryCacheManager en argument. Vous pouvez créer votre propre instance de DefaultRepositoryCacheManager spécialement configurée et la transmettre à la méthode. Avec useOrigin, vous indiquez que le cache ne doit pas être utilisé pour les artefacts.

DefaultRepositoryCacheManager cacheManager = new DefaultRepositoryCacheManager(); cacheManager.setName(name); cacheManager.setUseOrigin(true); cacheManager.setLockStrategy(new NoLockStrategy()); cacheManager.setIvyPattern(ResolverContainer.DEFAULT_CACHE_IVY_PATTERN);

Nous voulons le rendre plus pratique à 1.0.

+0

Merci! Cela semble avoir fait l'affaire. Une petite question: j'ai remarqué que bien que le classpath correct soit maintenant utilisé, les bibliothèques sont toujours copiées dans le cache. Quelle est la raison pour que le gestionnaire de cache copie sur les fichiers si useOrigin est défini sur 'true'? –

Questions connexes