在Gradle中,如何忽略本地常春藤存储库的缓存?

时间:2010-07-14 21:25:19

标签: caching ivy dependency-management gradle

在我的Gradle脚本(版本0.8)中,我有一个本地ivy存储库,我用它来发布一个库,我似乎无法让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 / cache / myorg:mylib /,而不是我本地常春藤的位置库。 Gradle手册只有几行提到默认本地存储库不应该使用缓存,但我现在发现实际上表明我的存储库是'默认'和本地的,因此不应该使用缓存。

我尝试过设置ivy_repo.local = true,或者使用compile('myorg:mylib:0.1.0'){changing = true},但似乎都没有效果。

我不想使用flatDir存储库,因为本地库具有我希望我的项目可以找到的依赖项(我现在正在使用与本地库关联的常春藤文件来执行此操作,并且它似乎是flatDir存储库忽略了这些类型的文件......或者我在那里做错了什么?)

有人知道解决方案吗?或者也许是使用Gradle完成任务的更好方法?

1 个答案:

答案 0 :(得分: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中使这更方便。