围绕快照的 gradle 缓存问题的解决方案?



将快照发布到 artifactory/mavenLocal 时,项目不会选取最新的快照。这需要从 ~/.gradle/cache 中删除 jar

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

在解决您的问题时需要考虑两件事:

  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 配置为更频繁地使依赖项缓存失效(从而下载新的快照)。例如:

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 检索该工件的频率就越高。如果完全禁用缓存,它将在每次执行期间获取依赖项。

最新更新