技术经验谈 技术经验谈
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hss01248

一号线程序员
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 编译和自动化

    • gradle基础
    • gradle-task
    • appbundle打包的自动化
    • cmake vs gradle
    • cmake入门
    • gradle依赖管理
    • gradle加速之拉取依赖的加速
      • 前言
        • 情况1 : 每次点击sync project with gradle files 都去拉取某个pom,且那个pom对应的版本真的不存在
        • 情况2: 每次点击sync project with gradle files或者build,都去拉一堆的pom,且这些pom对应的版本在gradle cache里能找到
    • gradle远程脚本
    • maven
    • 多module时自动发布所有lib
    • 将react native打包成一个aar
  • 异常上报和监测

  • SDK封装方法论
  • 结构化文档一键转代码的实践-埋点-翻译-java api注释
  • 防御式编程例子1-颜色解析工具的处理
  • 工程方法
  • 编译和自动化
hss01248
2022-04-27
目录

gradle加速之拉取依赖的加速

# 玩转gradle repository

# 1 gradle加速之拉取依赖的加速

# 前言

镜像配置都是常规操作,必要时也可以上代理.

自己搭的nexus本质也是一种镜像,可以代理maven中央仓库.

各个仓库的测速,可以使用这个脚本:

通过测速,调整仓库的顺序

apply from: 'https://raw.githubusercontent.com/hss01248/flipperUtil/master/deps/depsLastestChecker.gradle'
1

image-20220427204835585

# 情况1 : 每次点击sync project with gradle files 都去拉取某个pom,且那个pom对应的版本真的不存在

或者有带+号的动态版本依赖,也最好锁死版本

image-20220427194626339

耗时:18s

image-20220427194728442

1 去对应gradle缓存里去看这个库在不在: 确实不在

image-20220427194951868

2 看com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46-androidx这个到底在哪个仓库中. 直接先去maven中央仓库搜索:

发现TMD根本就没有这个版本的库.

https://mvnrepository.com/artifact/com.github.CymChad/BaseRecyclerViewAdapterHelper?repo=mulesoft-public

image-20220427195118740

解决方案:

方案1: 打印依赖树,看这个版本谁引入的,exclude掉

方案2: 直接强制指定这个库的版本为项目中实际用的版本,就不会去额外请求这个版本的pom. 如下:

 all {
        resolutionStrategy {
            //gradle 刷新加速. 避免每次去刷新com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46-androidx
            //2.9.46-androidx不存在,所以每次都会去拉取 ; 
            force 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.49-androidx'
1
2
3
4
5

# 情况2: 每次点击sync project with gradle files或者build,都去拉一堆的pom,且这些pom对应的版本在gradle cache里能找到

每次点击sync project with gradle files,都要耗时3-5min,下载一堆已经存在的库(gradle cache里已经有对应的版本)

这时早就配置好了下面的

all{
  resolutionStrategy{
  // cache dynamic versions for 10 minutes
    cacheDynamicVersionsFor 24, 'hours'
    // don't cache changing modules at all
    cacheChangingModulesFor 24, 'hours'
  }
}
1
2
3
4
5
6
7
8

发现没有repository里没有配置mavenlocal, 配置一下就好了

类似这里提到的:

Gradle 总是在每次 build 下载 pom 文件 (opens new window)

最后,刷新只要10s左右

# jcenter挂掉,移除它

换成aliyun

allprojects {
    repositories {
        def REPOSITORY_URL = 'https://maven.aliyun.com/repository/jcenter'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                println("ArtifactRepository : " + url)
                def url = repo.url.toString()
                if (url.startsWith('https://jcenter.bintray.com')) {
                    remove repo
                }
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

必须用dsl,不能用gradle.addBuildListener的方式,

比如下面这个,能移除,但会导致file开头的maven全部报错

apply from: 'https://raw.githubusercontent.com/hss01248/flipperUtil/dev/repo_remove_jcenter.gradle'
1

用这个dsl也可以移除重复repo,以及将repo排序

一般推荐把自己公司的nexus写到最前面

# gradle cache发到maven local或者nexus

写一个脚本,将gradle的cache全部拷贝到maven local

或者用maven 命令发布到nexus

这个脚本可以挂到gradle的buildFinish回调里

纯拷贝文件的话,无法生成metadata.xml

task cacheToMavenLocal(type: Sync) {
    from new File(gradle.gradleUserHomeDir, 'caches/modules-2/files-2.1')
    into "${rootDir}/local-m2"

    // Last copy target wins
    duplicatesStrategy = 'include'

    eachFile {
        List<String> parts = it.path.split('/')
        // Construct a maven repo file tree from the path
        it.path = parts[0].replace('.','/') +
                '/' + parts[1] +
                '/' + parts[2] +
                '/' + parts[4]
    }

    includeEmptyDirs false
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
编辑 (opens new window)
上次更新: 2022/11/01, 18:00:16
gradle依赖管理
gradle远程脚本

← gradle依赖管理 gradle远程脚本→

最近更新
01
截图后的自动压缩工具
12-27
02
图片视频文件根据exif批量重命名
12-27
03
chatgpt图片识别描述功能
02-20
更多文章>
Theme by Vdoing | Copyright © 2020-2025 | 粤ICP备20041795号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式