init.gradle 文件全局替换仓库地址解决 Connection 失败的问题

开发工具 Android Studio 使用 Gradle 构建工程的过程中,由于网络原因偶尔会出现 Sync 失败的情况,Build 窗口报错内容为:

ERROR: Connection reset

Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':classpath'.
......

出现这种问题的原因是,项目工程中 Gradle 配置的 google() 或 jcenter() 等远程仓库,对于国内这种网络,访问不是很通畅,下载依赖内容很容易失败。

这个时候,我们可以修改 Gradle 配置文件,借助各种第三方开源镜像网站替换 repositories 配置项的内容。可以直接修改工程根目录下的 build.gradle 文件,针对单一项目生效;也可以借助电脑用户目录下的 init.gradle 文件,所有项目统一修改。

这里我们主要看下使用 init.gradle 文件的方式,电脑中 gradle 的本地缓存目录里面默认是没有这个文件的,我们可以手动添加,文件内容可以是这样的:

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public/' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}

        all { ArtifactRepository repo ->
            if (repo instanceof MavenArtifactRepository) {
                def url = repo.url.toString()

                if (url.startsWith('https://repo.maven.apache.org/maven2/') || url.startsWith('https://repo.maven.org/maven2') || url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    //project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                    remove repo
                }
            }
        }
    }

    buildscript {

        repositories {

            maven { url 'https://maven.aliyun.com/repository/public/'}
            maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
            maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
            maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
            all { ArtifactRepository repo ->
                if (repo instanceof MavenArtifactRepository) {
                    def url = repo.url.toString()
                    if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                        //project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                        remove repo
                    }
                }
            }
        }
    }

}

这里是利用 阿里云开源镜像站 替换掉网络访问困难的 maven、jcenter 等仓库地址,可以参考一下,当然也可以按需求改。

默认情况下,init.gradle 文件放置于 Gradle 缓存目录 /Users/{username}/.gradle 目录中。Gradle 缓存目录可以在 Android Studio 的设置项 Gradle 窗口查看和修改:

Service directory path

关于 init.gradle 配置文件的详细介绍可以参考链接:

  • https://juejin.im/post/5b000522f265da0b7f44d1c7

  • https://www.cnblogs.com/langtianya/p/5220212.html

推荐阅读:1024 程序员节,是时候薅羊毛屯书了如何像 IDE 一样浏览 GitHub 网站的项目?简直是搜索引擎界的新起之秀,你值得拥有!

长按识别二维码,关注我,一名爱叨叨的程序员

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值