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

如何强制gradle重新下载依赖项?,gradle,Gradle,如何让gradle从存储库中重新下载依赖项?通常,您可以使用命令行选项刷新缓存中的依赖项。您还可以删除~/.gradle/caches下的缓存文件。在下一次构建中,Gradle将再次尝试下载它们 您的具体用例是什么?您使用动态依赖项版本还是快照版本 在Unix系统上,您可以删除Gradle使用以下方法下载的所有现有工件(工件和元数据): rm -rf $HOME/.gradle/caches/ 通过将依赖项标记为“正在更改”,可以告诉Gradle重新下载构建脚本中的某些依赖项。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