有关快照的Gradle缓存问题的解决方案?

时间:2019-04-12 09:13:37

标签: maven gradle

将快照发布到工件/ mavenLocal时,项目将不会获取最新的快照。这需要从〜/ .gradle / cache

中删除jar

Maven具有为快照设置时间戳的功能。 Gradle缓存如何使用?

1 个答案:

答案 0 :(得分:1)

要解决您的问题,有两件事要考虑:

  1. Gradle如何处理/识别快照
  2. 如何覆盖Gradle的默认行为

关于Gradle如何识别/处理快照的一些背景信息

默认情况下,Gradle将每24小时刷新一次快照依赖项。

如果版本以-SNAPSHOT结尾,

Gradle将自动将依赖项识别为快照。例如:

dependencies {
    compile group: "aGroup", name: "anArtifact", version: "1.0-SNAPSHOT"
}

但是,如果依赖项的版本字符串不以-SNAPSHOT结尾,则需要告知Gradle它是带有changing参数的快照。例如:

dependencies {
    compile group: "aGroup", name: "anArtifact", version: "1.0", changing: true
}

覆盖Gradle下载快照的频率

覆盖默认的24小时策略的唯一机制是将Gradle配置为更频繁地使依赖项缓存无效(从而下载新的SNAPSHOT)。例如:

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

动态版本化的依赖项缓存将需要单独配置

如果您使用的是任何动态版本,例如:

dependencies {
    compile group: "aGroup", name: "anArtifact", version: "1.+", changing: true
}

您需要为这些依赖项分别配置缓存无效,例如:

configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
    resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds'
}

对性能产生的影响

要注意的一件事是,缓存依赖项的时间越短,Gradle检索该工件的频率就越高。如果完全禁用了缓存,则它将在每次执行时获取依赖关系。