如何强制gradle重新下载依赖项?

时间:2012-11-26 12:42:42

标签: gradle

如何告诉gradle从存储库重新下载依赖项?

23 个答案:

答案 0 :(得分:740)

通常,您可以使用命令行选项--refresh-dependencies刷新缓存中的依赖项。您还可以删除~/.gradle/caches下的缓存文件。使用下一个版本,Gradle将尝试再次下载它们。

您的具体用例是什么?您使用动态依赖版本还是SNAPSHOT版本?


在Unix系统上,您可以删除Gradle使用以下命令下载的所有现有工件(工件和元数据):

rm -rf $HOME/.gradle/caches/

答案 1 :(得分:535)

如果您使用的是最新版本的Gradle,则可以使用--refresh-dependencies选项。

./gradlew build --refresh-dependencies

您可以参考Gradle manual

  

--refresh-dependencies选项告诉Gradle忽略已解析的模块和工件的所有缓存条目。将对所有已配置的存储库执行新的解析,重新计算动态版本,刷新模块,以及工件下载。

答案 2 :(得分:276)

您可以通过将依赖项标记为“更改”来告诉Gradle重新下载构建脚本中的某些依赖项。 Gradle将每24小时检查一次更新,但可以使用resolutionStrategy DSL进行配置。我发现将它用于SNAPSHOT或NIGHTLY构建很有用。

configurations.all {
    // Check for updates every build
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

展开:

dependencies {
    compile group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}

冷凝的:

compile('group:projectA:1.1-SNAPSHOT') { changing = true }

我在此forum thread找到了此解决方案。

答案 3 :(得分:58)

适用于MAC

./gradlew build --refresh-dependencies

适用于Windows

gradlew build --refresh-dependencies

也可以尝试gradlew assembleDevelopmentDebug --refresh-dependencies

答案 4 :(得分:22)

对于Windows ...为了使gradle重新下载特定的依赖项:

  1. 从以下目录中删除要重新下载的依赖项:

    C:\Users\[username]\.gradle\caches\modules-2\files-2.1
    
  2. 删除路径中的所有元数据目录:

    C:\Users\[username]\.gradle\caches\modules-2\metadata-*
    
  3. 在项目的根目录中运行gradle build(或gradlew build,如果使用gradle wrapper)。

  4. 注意:上面文件路径中的数字可能与您有所不同。

答案 5 :(得分:17)

可以删除带有缓存jar的文件夹。

在我的情况下,Mac上的 ,该库缓存在路径:

/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove

我删除了缓存的库文件夹(上例中的“cached-library-to-remove”),删除了我项目的build文件夹并重新编译。 然后下载了新鲜的图书馆。

答案 6 :(得分:11)

要刷新缓存的“发布”版本,唯一的选择是清除本地缓存。

rm -rf $HOME/.gradle/caches/

要刷新缓存的“快照”版本,您可以:

./gradlew build --refresh-dependencies

答案 7 :(得分:10)

您可以删除特定组或工件ID的缓存,而不是删除整个gradle缓存(如此处提供的一些答案)。我在.bash_profile添加了以下功能:

deleteGradleCache() {
  local id=$1
  if [ -z "$id" ]; then
    echo "Please provide an group or artifact id to delete"
    return 1
  fi
  find ~/.gradle/caches/ -type d -name "$id" -prune -exec rm -rf "{}" \; -print
}

用法:

$ deleteGradleCache com.android.support

然后,在下一次构建或重新同步时,gradle将重新下载依赖项。

答案 8 :(得分:7)

这对我有用。 通过取消选中文件>设置> Gradle>脱机工作中的按钮,确保Gradle未设置为离线。

将它添加到build.gradle的顶层,很高兴有上面的依赖

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

我确保我的依赖关系是这样编写的:

implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
    changing = true
}

此后,我在Android Studio中打开Gradle面板,然后单击蓝色圆圈箭头按钮。我总能看到我的更新获得一个新的副本。

答案 9 :(得分:6)

有两种方法可以做到这一点:

  1. 使用命令行选项刷新受款人兑现。
  2. 您可以删除Gradle缓存artefasts缓存的本地缓存并触发构建

使用-刷新依赖项选项:

./gradlew build --refresh-dependencies

简短说明 --refresh-dependencies选项告诉Gradle忽略所有已缓存模块和工件的缓存条目。

长解释

  • –refresh-dependencies'Gradle始终会访问远程服务器以检查更新的工件:但是,Gradle会避免下载缓存中已存在相同文件的文件。
    • First Gradle将发出HEAD请求,并检查服务器自上次以来是否报告文件未更改(如果“ content-length”和“ last-modified”未更改)。在这种情况下,您会收到消息:“缓存的资源是最新的(lastModified:{})。”
    • 如果可能的话,Next Gradle将确定远程校验和(通过HEAD请求或下载“ .sha1”文件)。 如果此校验和与已经从任何存储库下载的另一个文件匹配,则Gradle只需将文件复制到缓存中, 而不是重新下载。在这种情况下,您会收到消息:““找到具有匹配校验和的本地可用资源:[{},{}]”。

使用删除: 删除缓存

rm -rf $HOME/.gradle/caches/

您只需要清除所有缓存的jar和sha1 sums,Gradle就会出现机器上没有工件的情况,并且必须下载所有内容。是的,它将第一次100%起作用,但是当另一个SNAPSHOT发布并且它是您的依赖项树的一部分时,您将再次面临刷新或清除缓存的选择。

答案 10 :(得分:2)

删除此目录:

C:\Users\[username]\.gradle

答案 11 :(得分:2)

就我而言,上述方法均无效,我所做的是:

  • build.gradle中,评论与我拥有的未解决的进口相关的依赖项
  • 点击“立即同步”
  • 取消对我刚才评论的评论
  • 再次单击“立即同步”

然后我的进口货物再次得到妥善解决。

答案 12 :(得分:1)

似乎gradle版本6.3,kotlin版本1.3.70,Groovy 2.5.10的change已更改为isChange

工作配置是

implementation("com.sample:commons:1.0.0-SNAPSHOT") {
        isChanging = true
    }

另外,运行此命令以获取最新的

./gradlew assemble  --refresh-dependencies

答案 13 :(得分:1)

以上所有解决方案都不适合我。

如果您使用IntelliJ,那么对我来说解决的只是刷新所有Gradle项目:

enter image description here

答案 14 :(得分:1)

Mb我为时已晚,但是我的解决方案是针对单个存储库。我认为删除〜/ .gradle / *是过大的。 我碰到的问题是我正在删除源所在的目录,并且gradle正在从nexus获取另一个版本。 为了避免这种情况,我运行下一个:

~/.gradle$ find . -type d -name 'group.plugins.awssdk'
./caches/modules-2/files-2.1/group.plugins.awssdk
./caches/modules-2/metadata-2.23/descriptors/group.plugins.awssdk

~/.gradle$ rm -r ./caches/modules-2/files-2.1/group.plugins.awssdk   ./caches/modules-2/metadata-2.23/descriptors/group.plugins.awssdk

在那之后,gradle正在从nexus拖动文件。

答案 15 :(得分:1)

对于那些想在哪里运行gradle命令的人:

打开android studio->单击终端(您将在android studio的基础上找到它)->命令工具将打开--->键入您的命令(gradlew build --refresh-dependencies)

答案 16 :(得分:0)

如果您使用的是eclipse,并且想要强制eclipse重新加载依赖项,则可以尝试使用以下命令

gradlew clean cleaneclipse build eclipse --refresh-dependencies

答案 17 :(得分:0)

删除所有缓存会使再次下载所有依赖项。所以要花很长时间,又很无聊,再次等待重新下载所有依赖项。

我如何能够通过以下方式解决此问题。

仅删除需要刷新的组。

Ex:如果我们要刷新 com.user.test

rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/

然后从build.gradle中删除依赖项并重新添加。 然后它将刷新依赖项我们想要的。

答案 18 :(得分:0)

您可以这样做

https://marschall.github.io/2017/04/17/disabling-gradle-cache.html

引用Disabling the Gradle Build Cache

  

当您定期使用Gradle构建大型项目时,Gradle构建缓存可能是一件好事。但是,当仅偶尔构建开源项目时,它很快就会变大。

     

要禁用Gradle构建缓存,请将以下行添加到~/.gradle/gradle.properties

org.gradle.caching=false
     

您可以使用以下方法清除现有缓存

rm -rf $HOME/.gradle/caches/
rm -rf $HOME/.gradle/wrapper/

答案 19 :(得分:0)

对于Android Studio 3.4.1

只需打开gradle选项卡(位于右侧),然后右键单击列表中的父项(应称为“ Android”),然后选择“刷新依赖项”即可。

这应该可以解决您的问题。

答案 20 :(得分:0)

在大多数情况下,只需重新构建项目即可解决问题。有时您必须运行./gradlew build --refresh-dependencies,因为已经提到了几个答案(需要很长时间,具体取决于您有多少依赖项)。但是,有时这些都不起作用:依赖关系不会被更新。然后,您可以执行以下操作:

  1. 从gradle文件中删除依赖项
  2. 运行/调试项目并等待其失败(有NonExistingClass的原因)
  3. 打“构建项目”并等待其成功完成
  4. 再次运行/调试

这很荒谬,而且看起来很疯狂,但是实际上我每天都会使用此过程,只是因为我需要的依赖项可以被更新数十次,而且任何适当的解决方案都不会产生任何效果。

答案 21 :(得分:0)

我认为gradle 2.14.1解决了这个问题。接受的答案是正确的,但gradle中存在一个带有-refresh-dependencies的错误。 2.14.1解决了这个问题。

请参阅https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556

答案 22 :(得分:-6)

您需要重新下载它,以便手动下载并替换损坏的文件并再次同步您的项目。转到这个位置 C:\用户[用户名] .gradle \包装\ DIST \ gradle3.3-所有\ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip 在这里删除gradle3.3allzip并通过从该站点再次下载来替换它 https://services.gradle.org/distributions/ 找到相同的文件并下载并粘贴到该位置 然后同步您的项目。 希望它也适合你。