如何强制更新 intellij 中的所有快照 Gradle 依赖项

How can I force update all the snapshot Gradle dependencies in intellij

我有一个带有 SNAPSHOT 依赖项的项目,使用 gradle 作为它在 intellij 中的构建工具。

问题是 intellij 使用的 SNAPSHOTS 现在已经过时了。

当我在命令行构建项目时

gradle build or 
gradle clean build --refresh-dependencies

在命令行上获取最新的依赖项。我还将我的成绩文件设置为始终下载快照依赖项 according to this answer

如何强制 intellij 下载所有依赖项?

我已经 运行 制作了一些非常粘性的快照。您可以尝试几个选项:

  • 在 Gradle 选项卡(UI 的右侧),单击蓝色圆圈箭头图标,这应该会刷新依赖项(在大多数情况下有效)
  • 如果这不起作用,请尝试使用绿色 "run Gradle command" 图标 运行在 IntelliJ 中 gradle 命令 - 这个 运行是 IntelliJs 环境中的命令,而不是本地计算机的命令。
  • 如果这两个都失败了,您可以将 Gradle resolutionStrategy 设置修改为: configurations.all { resolutionStrategy.cacheDynamicVersionsFor 4, 'hours' resolutionStrategy.cacheChangingModulesFor 4, 'hours' } 此配置更改是最后的选择,应谨慎使用。它基本上告诉 Gradle 更频繁地刷新本地缓存。进行这些更改后,您应该单击 IntelliJ Gradle 刷新按钮。

另一种选择是打开项目结构,然后在项目设置、库下,在列表中找到依赖项并将其删除。然后按 Gradle 刷新蓝色圆圈箭头图标,IntelliJ 应该获取最新版本。

在 IntelliJ 2017.2 中,您可以右键单击项目名称 Gradle 工具 Window 和 select 从上下文菜单刷新依赖项

这将刷新您的所有依赖项,而不仅仅是快照,因此可能需要一段时间。不知道其他版本的IntelliJ是否也有这个功能

编辑

在 Gradle 6+ 上,快照默认为 changing。因此,无需再设置 changing = true


上一个回答:

Gradle 默认缓存更改模块 24 小时。我们可以告诉 Gradle 通过标记为 'changing'.

来刷新或重新下载构建脚本中的依赖项

按照以下步骤操作:

步骤 #1:通过将 cacheChangingModulesFor 属性 的值设置为 0 秒,告诉 Gradle 不要缓存更改模块:

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

步骤#2:将需要刷新或重新下载的依赖项标记为更改模块:

dependencies {
    implementation("com.howtoprogram.buysell:payment-api:0.0.1-SNAPSHOT") {
        changing = true
    }
}

来源:Refresh or Redownload Dependencies in Gradle

IntelliJ IDEA 终极版 2020.1

右键单击 Gradle 工具中的项目名称 Window 和 select 刷新 Gradle Dependencies 从上下文菜单。

确保 IntelliJ 添加所有依赖项的最简单方法是使项目缓存失效并重新启动。重新加载项目大约需要一分钟。

智能IDE

File -> Invalidate Caches/Restart...

现在为了确保使用最新的快照,您必须在 gradle.build 文件中指定您正在使用的依赖项的版本。

通常大多数存储库中没有 'latest' 锚版本。您只需查看最新版本即可。

理论上,如果您知道发布日期和版本控制系统,您可以编写一个 Groovy 函数来返回依赖项 URL 并将其传递给实现。

def getLatestVersion(){
 ...build version string
return version //As string
}

implementation getLatestVersion()

但即使您引用 CI/CD 管道也不推荐这样做,以防万一发生任何超出您控制范围的更改