Gradle 使用阿里云仓库以及 'lastest.integration'或'+'问题

AndroidStudio使用Gradle进行依赖管理和下载,默认我们会使用三个maven中央仓库:

repositories {
	mavenCentral()
	google()
	jcenter()
}

这三个仓库都是海外服务器,国内如果想访问只能搭梯子,速度也不是很快。阿里云提供一个国内的云仓库,可以用来替代这些海外的仓库。

 repositories {
        maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
        mavenCentral()
		google()
		jcenter()
        }

如果要用到第三方的开源库,只需要添加具体的dependencies即可:

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'

有的时候我们希望每次使用最新版本的库,会这么干:

implementation 'com.android.support:appcompat-v7:lastest.integration'
implementation 'com.android.support.constraint:constraint-layout:+'

如果没有梯子,进行编译,会报错:
在这里插入图片描述
这就很奇怪了,都已经配置了阿里云的仓库,还是包这种错,肥啦吧唧坂田感觉没鸟用。如果删除:

	mavenCentral()
	google()
	jcenter()

仅保留阿里云的仓库,就能够编译通过。这里是不是有一万个?号,按照正常原理来说,阿里云仓库配置是放在这些国外仓库的前面,优先级是高于这些国外仓库的。而如果把lastest.integration和+改成具体的版本号,有可以编译通过,请求的就是阿里云的仓库。
总结:如果使用lastest.integration和+,系统就会走海外服务器,没有海外仓库,就走过来仓库。如果没有梯子就报错。
这是什么原因哩??
分析:其实 总结部分并不是精确,如果我们依赖一个仅阿里云有的,编译还是会报错。也就是说,只要存在lastest.integration和+,总是会请求到海外服务器。很有可能的原因是,为了找到最新的那个版本,gradle会去请求所有仓库,如果请求出现网络失败,则直接报错,也就是说哪怕某个依赖仅存在于某个仓库里面,gradle依然会遍历请求所有仓库,如果有或者没有,都不会出错,但是不能请求不了,也就是不能在网络请求阶段出错。
解决方案:不使用lastest.integration和+,

猜你喜欢

转载自blog.csdn.net/xDong66/article/details/86237404