如何强制gradle重新下载依赖项?
如何让gradle从存储库中重新下载依赖项?通常,您可以使用命令行选项刷新缓存中的依赖项。您还可以删除如何强制gradle重新下载依赖项?,gradle,Gradle,如何让gradle从存储库中重新下载依赖项?通常,您可以使用命令行选项刷新缓存中的依赖项。您还可以删除~/.gradle/caches下的缓存文件。在下一次构建中,Gradle将再次尝试下载它们 您的具体用例是什么?您使用动态依赖项版本还是快照版本 在Unix系统上,您可以删除Gradle使用以下方法下载的所有现有工件(工件和元数据): rm -rf $HOME/.gradle/caches/ 通过将依赖项标记为“正在更改”,可以告诉Gradle重新下载构建脚本中的某些依赖项。Gradle将
~/.gradle/caches
下的缓存文件。在下一次构建中,Gradle将再次尝试下载它们
您的具体用例是什么?您使用动态依赖项版本还是快照版本
在Unix系统上,您可以删除Gradle使用以下方法下载的所有现有工件(工件和元数据):
rm -rf $HOME/.gradle/caches/
通过将依赖项标记为“正在更改”,可以告诉Gradle重新下载构建脚本中的某些依赖项。Gradle将每24小时检查一次更新,但这可以使用resolutionStrategy DSL进行配置。我发现将其用于快照或夜间构建非常有用
configurations.all {
// Check for updates every build
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
扩大:
dependencies {
implementation group: "group", name: "projectA", version: "1.1-SNAPSHOT", changing: true
}
浓缩:
implementation('group:projectA:1.1-SNAPSHOT') { changing = true }
我在这里找到了这个解决方案。如果您使用的是最新版本的Gradle,您可以使用--refresh dependencies选项
./gradlew build --refresh-dependencies
你可以参考
刷新依赖项选项告诉Gradle忽略已解析模块和工件的所有缓存项。将对所有配置的存储库执行新解析,重新计算动态版本、刷新模块和下载工件
适用于Windows…为了使gradle重新下载特定的依赖项:
C:\Users\%USERNAME%\.gradle\caches\modules-2\files-2.1
C:\Users\%USERNAME%\.gradle\caches\modules-2\metadata-*
gradlebuild
(或gradlew build
,如果使用gradle包装器)
注意:上面文件路径中的数字可能与您不同。我认为gradle 2.14.1解决了这个问题。被接受的答案是正确的,但是gradle中有一个bug–刷新依赖项。2.14.1解决了这一问题
请参见可以删除带有缓存jar的文件夹 在我的例子中,Mac上的库缓存在路径:
/Users/MY_NAME/.gradle/caches/modules-2/files-2.1/要删除的缓存库
我删除了缓存库文件夹(在上面的示例中是“要删除的缓存库”),删除了我的项目的构建文件夹,然后再次编译。
当时下载了Fresh library。适用于MAC
/gradlew构建--刷新依赖项
org.gradle.caching=false
适用于Windows
gradlew构建--刷新依赖项
org.gradle.caching=false
也可以尝试
gradlew assembleDevelopmentDebug--刷新依赖项而不是像这里的一些答案所建议的那样删除整个gradle缓存,您可以删除特定组或工件id的缓存。我在中添加了以下函数。bash\u 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
}
org.gradle.caching=false
用法:
$ deleteGradleCache com.android.support
然后,在下一次构建或重新同步时,gradle将重新下载依赖项。您需要重新下载它,以便手动下载并替换损坏的文件,然后再次同步项目。去这个地方
C:\users[username].gradle\wrapper\dist\gradle3.3-all\55gk2rcmfc6p2dg9u9ohc3hw9\gradle-3.3-all.zip
此处删除gradle3.3allzip,并通过从此站点再次下载来替换它
找到相同的文件,下载并粘贴到该位置
然后同步你的项目。
希望它也适用于您。删除此目录:
C:\Users\[username]\.gradle
这对我有用。
通过取消选中“文件>设置>渐变>脱机工作”中的按钮,确保渐变未设置为脱机
将此添加到build.gradle的顶层,很高兴有上述依赖项
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
我确保我的依赖项是这样写的:
implementation('com.github.juanmendez:ThatDependency:ThatBranch-SNAPSHOT') {
changing = true
}
此后,我在Android Studio中打开Gradle面板并单击蓝色圆圈箭头按钮。我总能看到我的更新得到新的副本。对于大多数情况,只要重新构建项目就可以了。有时您必须运行/gradlew build--refresh dependencies
,正如几个答案已经提到的那样(需要很长时间,具体取决于您有多少依赖项)。然而,有时这些都不起作用:依赖项就是不会得到更新。然后,您可以执行以下操作:
从gradle文件中删除依赖项
运行/调试项目并等待其失败(原因是不存在类)
点击“构建项目”并等待它成功完成
再次运行/调试
这是荒谬的,看起来很疯狂,但实际上我每天都在使用这个过程,因为我需要的依赖项可以被更新几十次,而任何适当的解决方案都不会产生任何效果 有两种方法:
使用命令行选项刷新从属项现金李>
您可以删除本地缓存,其中Artefast是Gradle和触发器生成的缓存
使用--刷新依赖项选项:
./gradlew build --refresh-dependencies
简短解释--“刷新依赖项”选项告诉Gradle忽略已解析模块和工件的所有缓存项
详细解释
- WIth–refresh dependencies的Gradle将始终命中远程服务器以检查更新的工件:但是,Gradle将避免下载缓存中已存在相同文件的文件。
- First Gradle将发出HEAD请求,并检查服务器是否报告自上次以来该文件未更改(如果“内容长度”和“上次修改”未更改)。在本例中,您将得到这样一条消息:“缓存的资源是最新的(lastModified:{})。”
- 下一个Gradle将尽可能确定远程校验和(从HEAD请求或下载“.sha1”文件)。。
如果此校验和与已下载的另一个文件(从任何存储库)匹配,则Gradle只需将该文件复制到缓存中,
而不是重新下载。在这个
rm -rf $HOME/.gradle/caches/
rm -rf $HOME/.gradle/wrapper/
gradlew clean cleaneclipse build eclipse --refresh-dependencies
~/.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
rm -fr ~/.gradle/caches/modules-2/files-2.1/com.user.test/
rm -rf $HOME/.gradle/caches/
./gradlew build --refresh-dependencies
implementation("com.sample:commons:1.0.0-SNAPSHOT") {
isChanging = true
}
./gradlew assemble --refresh-dependencies