如何告诉gradle从存储库重新下载依赖项?
可以使用缓存的jar删除文件夹 .
就我而言, on Mac 该库缓存在路径中:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
我删除了缓存的库文件夹(上例中的“cached-library-to-remove”),删除了我项目的build文件夹并重新编译 . 然后下载了鲜库 .
这对我有用 . 通过取消选中文件>设置> Gradle>离线工作中的按钮,确保Gradle未设置为脱机 .
将它添加到build.gradle的顶层,很高兴有上面的依赖项
configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' }
我确保我的依赖项是这样编写的:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') { changing = true }
之后,我在Android Studio中打开Gradle面板,然后单击蓝色圆圈箭头按钮 . 我总能看到我的更新获得一个新的副本 .
如此处的一些答案所示,您可以删除特定组或工件ID的缓存,而不是删除整个gradle缓存 . 我在 .bash_profile 添加了以下功能:
.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将重新下载依赖项 .
通常,您可以使用命令行选项--refresh-dependencies刷新缓存中的依赖项 . 您还可以删除 ~/.gradle/caches 下的缓存文件 . 使用下一个版本,Gradle将尝试再次下载它们 .
~/.gradle/caches
你的具体用例是什么?您使用动态依赖版本还是SNAPSHOT版本?
在Unix系统上,您可以删除Gradle使用以下命令下载的所有现有工件(工件和元数据):
rm -rf $HOME/.gradle/caches/
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拖动文件 .
有两种方法可以做到这一点:
使用命令行选项刷新依赖项cashe .
您可以通过Gradle删除artefasts为缓存的本地缓存并触发构建
使用 --refresh-dependencies 选项:
./gradlew build --refresh-dependencies
Short explanation --refresh-dependencies选项告诉Gradle忽略已解析模块和工件的所有缓存条目 .
Long explanantion
WIth -refresh-dependencies'Gradle将始终命中远程服务器以检查更新的工件:但是,Gradle将避免下载缓存中已存在相同文件的文件 .
First Gradle将发出HEAD请求并检查服务器是否自上次报告文件未更改(如果'content-length'和'last-modified'未更改) . 在这种情况下,您将收到消息:"Cached resource is up-to-date (lastModified: {})."
Next Gradle将尽可能确定远程校验和(来自HEAD请求或下载'.sha1'文件) . 如果此校验和与已下载的另一个文件(来自任何存储库)匹配,则Gradle将只复制该文件缓存,而不是重新下载 . 在这种情况下,您将收到消息:“”找到具有匹配校验和的本地可用资源:[{},{}]“ .
使用删除:删除缓存时
您只需清理所有缓存的jar和sha1总和,Gradle就会出现机器上没有工件并且必须下载所有内容的情况 . 是的,它将首次100%工作,但是当另一个SNAPSHOT被释放并且它是您的依赖树的一部分时,您将在选择之前再次面对刷新或清除缓存 .
删除此目录:
C:\Users\[username]\.gradle
我认为gradle 2.14.1解决了这个问题 . 接受的答案是正确的,但gradle中存在一个带有-refresh-dependencies的错误 . 2.14.1解决了这个问题 .
见https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
如果您正在使用eclipse,并且如果您希望强制eclipse重新加载依赖项,则可以尝试使用以下命令
gradlew clean cleaneclipse build eclipse --refresh-dependencies
For MAC
For Windows
gradlew build --refresh-dependencies
也可以试试 gradlew assembleDevelopmentDebug --refresh-dependencies
gradlew assembleDevelopmentDebug --refresh-dependencies
您可以通过将依赖关系标记为“更改”来告诉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找到了这个解决方案 .
对于大多数情况,只需简单地重建项目即可 . 有时您必须运行 ./gradlew build --refresh-dependencies ,因为已经提到了几个答案(需要很长时间,具体取决于您有多少依赖项) . 然而,有时这些都不会起作用:依赖性不会得到更新 . 然后,你可以这样做:
从gradle文件中删除依赖项
运行/调试项目并等待它失败(原因是 NonExistingClass )
NonExistingClass
点击"build project"并等待它成功完成
再次运行/调试
这是荒谬的,似乎是疯狂,但我实际上每天都使用这个程序,因为我需要的依赖可以更新几十次,没有一个适当的解决方案会产生任何影响 .
你可以这样做
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 /
For those who are wondering where to run gradle commands:
打开android studio - >点击Terminal(你会发现它在android studio的基础上) - >命令工具将打开--->输入你的命令(gradlew build --refresh-dependencies)
如果您使用的是最新版本的Gradle,则可以使用--refresh-dependencies选项 .
你可以参考Gradle manual .
--refresh-dependencies选项告诉Gradle忽略已解析模块和工件的所有缓存条目 . 将对所有已配置的存储库执行全新解析,重新计算动态版本,刷新模块并下载工件 .
For Windows ...为了使gradle重新下载特定的依赖项:
C:\Users\[username]\.gradle\caches\modules-2\files-2.1
C:\Users\[username]\.gradle\caches\modules-2\metadata-*
gradle build
gradlew build
注意:上面文件路径中的数字可能与您有所不同 .
您需要重新下载它,以便您可以手动下载并替换损坏的文件并再次同步您的项目 . 转到此位置C:\ users [用户名] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip这里删除gradle3.3allzip并通过从此站点再次下载替换它https://services.gradle.org/distributions/查找相同的文件并下载并粘贴到该位置然后同步您的项目 . 希望它也适合你 .
17 回答
可以使用缓存的jar删除文件夹 .
就我而言, on Mac 该库缓存在路径中:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/cached-library-to-remove
我删除了缓存的库文件夹(上例中的“cached-library-to-remove”),删除了我项目的build文件夹并重新编译 . 然后下载了鲜库 .
这对我有用 . 通过取消选中文件>设置> Gradle>离线工作中的按钮,确保Gradle未设置为脱机 .
将它添加到build.gradle的顶层,很高兴有上面的依赖项
我确保我的依赖项是这样编写的:
之后,我在Android Studio中打开Gradle面板,然后单击蓝色圆圈箭头按钮 . 我总能看到我的更新获得一个新的副本 .
如此处的一些答案所示,您可以删除特定组或工件ID的缓存,而不是删除整个gradle缓存 . 我在
.bash_profile
添加了以下功能:用法:
然后,在下一次构建或重新同步时,gradle将重新下载依赖项 .
通常,您可以使用命令行选项--refresh-dependencies刷新缓存中的依赖项 . 您还可以删除
~/.gradle/caches
下的缓存文件 . 使用下一个版本,Gradle将尝试再次下载它们 .你的具体用例是什么?您使用动态依赖版本还是SNAPSHOT版本?
在Unix系统上,您可以删除Gradle使用以下命令下载的所有现有工件(工件和元数据):
Mb我太迟了,但我的解决方案是单个存储库 . 我认为删除〜/ .gradle / *是矫枉过正的 . 我遇到的问题是我正在删除源代码所在的目录,并且gradle正在获取另一个版本而不是来自nexus . 为了避免我运行下一个:
之后,该gradle从nexus拖动文件 .
有两种方法可以做到这一点:
使用命令行选项刷新依赖项cashe .
您可以通过Gradle删除artefasts为缓存的本地缓存并触发构建
使用 --refresh-dependencies 选项:
Short explanation --refresh-dependencies选项告诉Gradle忽略已解析模块和工件的所有缓存条目 .
Long explanantion
WIth -refresh-dependencies'Gradle将始终命中远程服务器以检查更新的工件:但是,Gradle将避免下载缓存中已存在相同文件的文件 .
First Gradle将发出HEAD请求并检查服务器是否自上次报告文件未更改(如果'content-length'和'last-modified'未更改) . 在这种情况下,您将收到消息:"Cached resource is up-to-date (lastModified: {})."
Next Gradle将尽可能确定远程校验和(来自HEAD请求或下载'.sha1'文件) . 如果此校验和与已下载的另一个文件(来自任何存储库)匹配,则Gradle将只复制该文件缓存,而不是重新下载 . 在这种情况下,您将收到消息:“”找到具有匹配校验和的本地可用资源:[{},{}]“ .
使用删除:删除缓存时
您只需清理所有缓存的jar和sha1总和,Gradle就会出现机器上没有工件并且必须下载所有内容的情况 . 是的,它将首次100%工作,但是当另一个SNAPSHOT被释放并且它是您的依赖树的一部分时,您将在选择之前再次面对刷新或清除缓存 .
删除此目录:
我认为gradle 2.14.1解决了这个问题 . 接受的答案是正确的,但gradle中存在一个带有-refresh-dependencies的错误 . 2.14.1解决了这个问题 .
见https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
如果您正在使用eclipse,并且如果您希望强制eclipse重新加载依赖项,则可以尝试使用以下命令
For MAC
./gradlew build --refresh-dependencies
For Windows
gradlew build --refresh-dependencies
也可以试试
gradlew assembleDevelopmentDebug --refresh-dependencies
您可以通过将依赖关系标记为“更改”来告诉Gradle重新下载构建脚本中的某些依赖项 . Gradle将每24小时检查一次更新,但可以使用resolutionStrategy DSL进行配置 . 我觉得将它用于SNAPSHOT或NIGHTLY构建很有用 .
扩展:
凝结:
我在这个forum thread找到了这个解决方案 .
对于大多数情况,只需简单地重建项目即可 . 有时您必须运行
./gradlew build --refresh-dependencies
,因为已经提到了几个答案(需要很长时间,具体取决于您有多少依赖项) . 然而,有时这些都不会起作用:依赖性不会得到更新 . 然后,你可以这样做:从gradle文件中删除依赖项
运行/调试项目并等待它失败(原因是
NonExistingClass
)点击"build project"并等待它成功完成
再次运行/调试
这是荒谬的,似乎是疯狂,但我实际上每天都使用这个程序,因为我需要的依赖可以更新几十次,没有一个适当的解决方案会产生任何影响 .
你可以这样做
引用Disabling the Gradle Build Cache
For those who are wondering where to run gradle commands:
打开android studio - >点击Terminal(你会发现它在android studio的基础上) - >命令工具将打开--->输入你的命令(gradlew build --refresh-dependencies)
如果您使用的是最新版本的Gradle,则可以使用--refresh-dependencies选项 .
你可以参考Gradle manual .
For Windows ...为了使gradle重新下载特定的依赖项:
gradle build
(如果使用gradle包装,则为gradlew build
) .注意:上面文件路径中的数字可能与您有所不同 .
您需要重新下载它,以便您可以手动下载并替换损坏的文件并再次同步您的项目 . 转到此位置C:\ users [用户名] .gradle \ wrapper \ dist \ gradle3.3-all \ 55gk2rcmfc6p2dg9u9ohc3hw9 \ gradle-3.3-all.zip这里删除gradle3.3allzip并通过从此站点再次下载替换它https://services.gradle.org/distributions/查找相同的文件并下载并粘贴到该位置然后同步您的项目 . 希望它也适合你 .