1

在我的 Gradle 脚本(0.8 版)中,我有一个用于发布库的本地常春藤存储库,但我似乎无法让 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'){changeing = true},但似乎都不起作用。

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

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

4

1 回答 1

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 中让这更方便。

于 2010-07-15T07:01:46.480 回答