2010-07-14 4 views
1

В моем сценарии Gradle (версия 0.8) у меня есть локальный репозиторий плюща, который я использую для публикации библиотеки, и я не могу заставить Gradle игнорировать его кеш.В Gradle, как игнорировать кеш для локального репозитория плюща?

Я обращаюсь к местному репо. основанный на рекомендации в руководстве Gradle. Здесь есть соответствующий код (с некоторыми переименованными переменными).

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) 
} 

Моя проблема заключается в том, что, когда я бегу мой сценарий, когда местные библиотеки будут решены, последующие вызовы в сценарий сборки использовать в ~/.gradle/кэш/MyOrg: MyLib /, а не местоположение моего локального репозитория плюща. В руководстве Gradle есть только несколько строк, в которых указано, что локальные репозитории по умолчанию не должны использовать кеш, но я нашел способ фактически указать, что мой репозиторий является «по умолчанию» и локальным, и поэтому не должен использовать кеш.

Я пробовал настройку ivy_repo.local = true или с помощью компиляции ('myorg: mylib: 0.1.0') {change = true}, но ни одна из них не работает.

Я не хочу использовать репозиторий flatDir, потому что у локальной библиотеки есть зависимости, которые я хочу, чтобы мой проект находил (и я использую файл ivy, связанный с локальной библиотекой, чтобы сделать это сейчас, и кажется, что репозиторий flatDir игнорирует такие файлы ... или, может быть, я что-то делал там не так?)

Кто-нибудь знает решение? Или, может быть, лучший способ выполнить мою задачу с Gradle?

ответ

0

Любой распознаватель плюща имеет метод Resolver.setRepositoryCacheManager(). В качестве аргумента требуется RepositoryCacheManager. Вы можете создать собственный специально настроенный экземпляр DefaultRepositoryCacheManager и передать его методу. С помощью useOrigin вы указываете, что кеш не должен использоваться для артефактов.

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

Мы хотим, чтобы сделать это более удобно в 1,0.

+0

Спасибо! Кажется, это трюк. Один маленький вопрос: я заметил, что, хотя теперь используется правильный путь класса, библиотеки все еще копируются в кеш. Какая причина, по которой диспетчер кэширования должен копировать файлы, если для useOrigin установлено значение «true»? –

Смежные вопросы