Android 项目中配置了多个 maven 仓库,但依赖还是下载失败,除了使用代理,还有其他方法吗?

news2025/5/10 16:52:06

文章目录

    • 前言
    • 解决方案
      • gradle
      • maven 仓库

前言

我们在Android 开发的过程中,经常会遇到三方依赖下载不下来的问题。一般情况下我们会在项目的build.gradle文件中配置多个 maven 仓库来解决。

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
     	maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
       

    }
}

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

    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

但有时候发现虽然我们配置了其他 maven 仓库,下载的时候还是会提示下载超时。看日志也会发现并没有从我们配置的仓库中下载。

解决方案

如果是在公司,我们可以在公司服务器上搭建自己的 maven 仓库,把项目中maven 仓库地址配置为自己公司的私有仓库,下载依赖包时从公司仓库下载,如果公司仓库没有缓存这个包,就由公司仓库从远程仓库中下载。这样只要下载成功一次,我们就可以一直使用。并且还避免了上游仓库下架该依赖时我们无法使用的问题。
但如果我们是在其他情况下没有办法使用公司仓库应该怎么整?

gradle

当我们想要升级 gradle 版本的时候,会修改项目工程中的 gradle/wrapper/gradle-wrapper.properties文件中的distributionUrl字段的值。这个值就是我们下载gradle的地址,默认地址比如https\://services.gradle.org/distributions/gradle-7.5-all.zip下载的很慢很慢很慢,我们可以修改为国内镜像地址,我使用的是腾讯镜像:distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.5-all.zip。修改完之后,从新sync 以下,享受飞一般的下载速度

maven 仓库

我们可以创建一个init.gradle.kts文件放在gradle的缓存文件夹中,这个文件夹一般是user/xxx/.gradle文件夹,然后在文件中写入如下内容

fun RepositoryHandler.enableMirror() {
    all {
        if (this is MavenArtifactRepository) {
            val originalUrl = this.url.toString().removeSuffix("/")
            urlMappings[originalUrl]?.let {
                logger.lifecycle("Repository[$url] is mirrored to $it")
                this.setUrl(it)
            }
        }
    }
}

val urlMappings = mapOf(
    "https://repo.maven.apache.org/maven2" to "https://mirrors.tencent.com/nexus/repository/maven-public/",
    "https://dl.google.com/dl/android/maven2" to "https://mirrors.tencent.com/nexus/repository/maven-public/",
    "https://plugins.gradle.org/m2" to "https://mirrors.tencent.com/nexus/repository/gradle-plugins/"
)

gradle.allprojects {
    buildscript {
        repositories.enableMirror()
    }
    repositories.enableMirror()
}

gradle.beforeSettings { 
    pluginManagement.repositories.enableMirror()
    dependencyResolutionManagement.repositories.enableMirror()
}

这里有一点需要注意,Gradle 低于6.8 没有 dependencyResolutionManagement 相关的 API,旧项目有兼容问题。
我们可以把gradle.beforeSettings闭包中相关代码注释掉,应该没啥影响。
当然也可以在 gradle.beforeSettings 中判断一下版本

gradle.beforeSettings {
    pluginManagement.repositories.enableMirror()
    // 6.8 及更高版本执行 DependencyResolutionManagement 配置
    if (gradle.gradleVersion >= "6.8") {
        val getDrm = settings.javaClass.getDeclaredMethod("getDependencyResolutionManagement")
        val drm = getDrm.invoke(settings)
        val getRepos = drm.javaClass.getDeclaredMethod("getRepositories")
        val repos = getRepos.invoke(drm) as RepositoryHandler
        repos.enableMirror()
        println("Gradle ${gradle.gradleVersion} DependencyResolutionManagement Configured $settings")
    } else {
        println("Gradle ${gradle.gradleVersion} DependencyResolutionManagement Ignored $settings")
    }
}

一般来讲,我们在build.gradle文件中配置的仓库,它们的地址对应的就是上面urlMappings中的key,我们将这些仓库地址全部替换为腾讯镜像就可以了

repositories {
	mavenCentral()//https://repo.maven.apache.org/maven2
	google()//https://dl.google.com/dl/android/maven2
	gradlePluginPortal()//https://plugins.gradle.org/m2
}

这么做的好处是只需要配置这一个文件,在本机上所有的gradle项目都会有效果。不需要每个项目都去配置,并且只影响本地环境,不会对其他机器造成影响。


方法来源于霍老师的视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关税冲击下,FBA国际物流企业如何靠智能拓客跑出增长“加速度”?

国际物流行业正迎来前所未有的增长机遇。据中研普华最新报告,2025年全球物流市场规模已突破6.27万亿美元,其中中国跨境物流市场预计达2.71万亿元。在全球化与数字化双轮驱动下,国际物流从“规模扩张”迈向“价值重构”。可以说,国…

vue源代码采用的设计模式分解

No.大剑师精品GIS教程推荐0地图渲染基础- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】 1Openlayers 【入门教程】 - 【源代码示例 300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3MapboxGL【入门教程】 - 【源代码图文示例150】 4Cesium 【入门教程】…

使用 JavaScript 实现数据导出为 Excel 和 CSV 文件

在 Web 开发中,经常会遇到需要将数据导出为文件的需求,例如将数据导出为 Excel 或 CSV 文件。今天,我们就来探讨如何使用 JavaScript 实现这一功能。 一、实现思路 我们通过 HTML 创建一个按钮,点击按钮时,触发 Java…

eNSP中路由器RIP协议配置完整实验实验和命令解释

一、实验拓扑 二、配置命令 R1配置并先测试一下连通性 R1、R2和R3接口配置完后再测试连通性,直连路由可通 启动RIP进程,宣告直连网络 查看路由表,测试连通性 环回接口配置 三、命令解释及注意事项 配置命令逐行解释 system-view: 从用户视…

密码学--AES

一、实验目的 1、完成AES算法中1轮加密和解密操作 2、掌握AES的4个基本处理步骤 3、理解对称加密算法的“对称”思想 二、实验内容 1、题目内容描述 (1)利用C语言实现字节代换和逆向字节代换,字节查S盒代换 (2)利…

Vue项目中实现自定义连线图

需求描述 在vue项目中实现由自定义块元素组成的连线图。效果图 实现思路 Leader-Line 是一个用于 Web 的轻量级 JavaScript 库,专为创建从一个元素指向另一个元素的引导线而设计。它提供了高度自定义的能力,使得开发者能够轻松地在网页上实现各种指引用…

C++编程语言:标准库:标准库概观(Bjarne Stroustrup)

第30章 标准库概观(Standard-Library Overview) 目录 30.1 引言 30.1.1 标准库设施 30.1.2 设计约束 30.1.3 描述风格 30.2 头文件 30.3 语言支持 30.3.1 对initializer_list的支持 30.3.2 对范围for的支持 30.4 异常处理 30.4.1 异常 30.4.1…

Shiro(八):JWT介绍

1、什么是JWT? JWT(JSON Web Token,JSON Web令牌)是一种开放标准(RFC 7519),用于在网络应 用环境间安全地传递声明(claims)作为JSON对象;JWT会按指定的加密算…

【HDLBits刷题】Verilog Language——1.Basics

目录 一、题目与题解 1.Simple wire(简单导线) 2.Four wires(4线) 3.Inverter(逆变器(非门)) 4.AND gate (与门) 5. NOR gate (或非门&am…

Python 常用内置函数详解(十):help()函数——查看对象的帮助信息

目录 一、语法参考二、示例 一、语法参考 help() 函数的语法格式如下: 参数说明: request:可选参数,要查看其帮助信息的对象,如类、函数、模块、数据类型等;返回值:返回对象的帮助信息。 二…

【Python系列】Python 中的 HTTP 请求处理

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

辉芒微离线烧录器“文件格式错误”问题解决

最近在使用辉芒微离线烧录器烧录程序时,提示“文件格式错误”,记录一下解决方法。 一、问题现象 经过多次尝试和排查,发现以下几种情况: 情况一:使用离线烧录器导入固件1(boot程序)&#xff0c…

【软件设计师:体系结构】15.计算机体系结构概论

计算机体系结构是指计算机系统的功能和属性,是程序员所看到的计算机的属性。它主要研究计算机体系的概念性结构和功能特性,包括指令集、数据类型、存储器寻址技术、I/O机制等。例如,计算机是否具备乘法指令的功能,这是一个体系结构的问题。 一、机内代码及运算 一、数的进…

vscode 配置doxygen注释和snippet

vscode 配置doxygen注释和snippet Doxygen的C/C注释原则 基于Doxygen的C/C注释原则 标注总述 1.文件头标注 2. 命名空间标注 3. 类、结构、枚举标注 4. 函数注释原则 5. 变量注释 6. 模块标注 7. 分组标注指令表格 命令字段名语法file文件名file [< name >]brief简介b…

HarmonyOS NEXT 免费无广告看电影app:从想法到实现的经验总结

学习一项新技能&#xff0c;最好也是最快的方法就是动手实战。学习鸿蒙也一样&#xff0c;给自己定一个小目标&#xff0c;直接找项目练,这样进步是最快的。最近&#xff0c;我在网上看到360周董的一句话&#xff1a;“想干什么就去干&#xff0c;干得烂总比不干强&#xff01;…

代码随想论图论part06冗余连接

图论part06 冗余连接 代码随想录 冗余边就是已经边已经在并查集里了&#xff0c;从图的角度来说构成了环&#xff08;冗余连接2要用到这个概念&#xff09; 代码其他部分为&#xff1a;并查集初始化&#xff0c;查根&#xff0c;判断是否在集合里&#xff0c;加入集合 冗余…

企业高性能WEB服务器—Nginx

Nginx介绍 Nginx是一款轻量级的网页服务器、反向代理服务器以及电子邮件代理服务器。 具有高并发&#xff08;特别是静态资源&#xff09;、占用系统资源少的特性。它不仅是Web服务软件&#xff0c;还具有反向代理负载均衡功能和缓存服务功能 具备如下基本特性 可针对静态资…

Python MNE-Python 脑功能磁共振数据分析

一、什​​么​​是​​Python MNE-Python 脑​​功​​能​​磁​​共​​振​​数​​据​​分​​析 为大脑功能磁共振成像数据分析工具&#xff0c;致力于为神经科学研究提供便捷、高效的数据分析处理工具。MNE-Python提供了处理和分析脑电图&#xff08;EEG&#xff09;、…

DevExpressWinForms-AlertControl-使用教程

文章目录 AlertControl-使用教程一、将 AlertControl 添加到 Form二、编辑 AlertControl 的 HtmlTemplateHTML Template Editor介绍编辑HTML Template 三、使用AlertControl弹出AlertAlert中的按钮事件获取 Alert 标题等信息向Alert传递参数 总结源码 AlertControl-使用教程 一…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.4 可视化报告输出

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 电商数据分析实战&#xff1a;基于PostgreSQL的可视化报告生成全流程9.4 可视化报告输出9.4.1 可视化报告设计框架9.4.1.1 报告目标与受众9.4.1.2 数据准备与指标体系 9.4.2…