【问题标题】:How can I force update all the snapshot Gradle dependencies in intellij如何强制更新 intellij 中的所有快照 Gradle 依赖项
【发布时间】:2015-09-18 13:03:03
【问题描述】:

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

问题在于 intellij 正在使用现已过时的 SNAPSHOTS。

当我在命令行上构建项目时

gradle build or 
gradle clean build --refresh-dependencies

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

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

【问题讨论】:

    标签: intellij-idea gradle intellij-14


    【解决方案1】:

    在 IntelliJ 2017.2 中,您可以右键单击项目名称中的 Gradle Tool Window 并从上下文菜单中选择 Refresh dependencies

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

    【讨论】:

    • 这可行,但速度很慢。有谁知道如何优化以只获取最新的 SNAPSHOTS?
    • 如果您要上传快照,然后在快速修复的情况下附加提交编号... 1.0.0-SNAPSHOT-1
    • 如果快照有变化并且版本相同,这不起作用。
    【解决方案2】:

    我遇到了一些非常棘手的快照。您可以尝试以下几个选项:

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

    【讨论】:

    • 在 Intellij 的 Gradle 选项卡上,顶部有一个绿色图标,可让您在 IDE 中执行 gradle 命令。
    • 啊,我明白你的意思了,然后呢? gradle clean build --refresh-dependencies?
    【解决方案3】:

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

    【讨论】:

    • 这是唯一对我有用的解决方案,在尝试了其他答案之后(可能需要在 --refresh-dependencies 解决方案之后完成)。
    【解决方案4】:

    IntelliJ IDEA ULTIMATE 2020.1

    右键单击 Gradle 工具窗口中的项目名称,然后从上下文菜单中选择 Refresh Gradle Dependencies

    【讨论】:

      【解决方案5】:

      编辑

      在 Gradle 6+ 上,快照默认为 changing。所以,不用再设置changing = true了。


      上一个答案:

      Gradle 默认缓存更改模块 24 小时。我们可以通过将构建脚本中的依赖项标记为“正在更改”来告诉 Gradle 刷新或重新下载依赖项。

      按照以下步骤操作:

      第 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

      【讨论】:

      • 该属性在 kts 方言中在 6.8.x 上称为 isChanging。不过好像是一回事。如果他们自动为快照构建执行此操作会很好。
      • @JillesvanGurp 好吧,从 Gradle 6 开始就是这种情况,请参阅编辑。
      • 是的,需要注意的是它仅每 24 小时检查一次,除非您将其更改为更合理的值。我们最终配置了一个configurations.all { resolutionStrategy { cacheChangingModulesFor(60, TimeUnit.SECONDS) } } 来解决这个问题。
      【解决方案6】:

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

      INTELLIJ IDE

      File -> Invalidate Caches/Restart...
      

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

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

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

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

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

      【讨论】:

      • 非常感谢。奋斗几个小时。
      猜你喜欢
      • 2017-02-22
      • 2014-11-16
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      相关资源
      最近更新 更多