我如何告诉gradle从存储库中重新下载依赖项?
当前回答
我认为gradle 2.14.1解决了这个问题。接受的答案是正确的,但有一个bug在gradle与-refresh-dependencies。2.14.1修复了这个问题。
参见https://discuss.gradle.org/t/refresh-dependencies-should-use-cachechangingmodulesfor-0s/556
其他回答
要刷新缓存的“释放”版本,唯一的选择是清除本地缓存。
rm -rf $HOME/.gradle/caches/
要刷新缓存的“快照”版本,可以:
./gradlew build --refresh-dependencies
您可以删除特定组或工件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将重新下载依赖项。
通常,您可以使用命令行选项refresh-dependencies刷新缓存中的依赖项。你也可以删除~/.gradle/caches下的缓存文件。在下一次构建时,Gradle会再次尝试下载它们。
您的具体用例是什么?您使用动态依赖版本还是快照版本?
在Unix系统上,你可以删除Gradle已经下载的所有现有工件(工件和元数据):
rm -rf $HOME/.gradle/caches/
注意——refresh-dependencies不会总是重新下载每个工件;它将使用与存储库中存在的内容匹配的现有副本。从Gradle用户指南,刷新依赖:
The --refresh-dependencies option tells Gradle to ignore all cached entries for resolved modules and artifacts. A fresh resolve will be performed against all configured repositories, with dynamic versions recalculated, modules refreshed, and artifacts downloaded. However, where possible Gradle will check if the previously downloaded artifacts are valid before downloading again. This is done by comparing published SHA1 values in the repository with the SHA1 values for existing downloaded artifacts. [...] It’s a common misconception to think that using --refresh-dependencies will force download of dependencies. This is not the case: Gradle will only perform what is strictly required to refresh the dynamic dependencies. This may involve downloading new listing or metadata files, or even artifacts, but if nothing changed, the impact is minimal.
只有手动删除缓存文件夹中的特定依赖才有效…由企业回购部门的同事制作的工艺品。
你可以告诉Gradle重新下载构建脚本中的依赖项,方法是将依赖项标记为“正在更改”。Gradle将每24小时检查一次更新,但是这可以使用resoltionstrategy DSL进行配置。我发现在SNAPSHOT或NIGHTLY构建中使用它很有用。
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包装文件?
- 构建被配置为优先选择设置存储库而不是项目存储库,但存储库“maven”是由构建文件“Build .gradle”添加的。
- “需要Gradle 2.10版本。”错误
- 在Android Studio 4.2中,Gradle任务不会显示在Gradle工具窗口中
- Android Studio -没有可调试的应用程序
- 无法找到或加载主类org.gradle.wrapper.GradleWrapperMain
- Android Studio gradle的构建时间太长了
- 在这个版本中使用了已弃用的Gradle特性,使得它与Gradle 5.0不兼容
- 从IntelliJ运行时,如何激活Spring Boot配置文件?
- 如何检查Gradle依赖是否有新版本?
- Android Gradle Apache HttpClient不存在?
- ':app:lintVitalRelease'生成签名apk时出错
- 不能找到方法编译()的参数Gradle
- 警告“Kotlin插件版本与库版本不相同”(但它是!)
- 在Gradle中构建脚本块的目的