frank_xxj 2024-12-12 17:49 采纳率: 0%
浏览 23

gradle build 进度慢

问题一:在gradle项目进行build时,即使已经在init.d文件夹里设置了init.gradle并配置了maven url(如阿里云的镜像源),但是在一开始的时候,也就是在进行第一个Task:prepareKotlinBuildScriptModel之前,大概会有很长时间什么输出都没有,这是为什么?

img

img

问题二:在进行第一个Task时(prepareKotlinBuildScriptModel),即使配置了阿里云maven url,但是初始的时候依然还是会从其他地方下载部分pom文件(后来会开始用阿里云镜像下载很多jar文件),这些最前边的pom的下载如何提速?

  • 写回答

1条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2024-12-12 18:55
    关注
    让道友老李来帮你解答,本回答参考通义千问qwen-plus编写提供,如果还有疑问可以评论或留言
    ### 问题一:长时间无输出的原因

    原因分析

    1. Gradle Daemon 启动

      • Gradle 在构建项目时会启动一个后台进程(Daemon),用于加速后续的构建任务。如果这是第一次启动 Daemon,或者 Daemon 已经被关闭,那么启动过程可能会比较慢。
    2. 依赖解析

      • prepareKotlinBuildScriptModel 任务之前,Gradle 需要解析项目的依赖关系。这包括从远程仓库下载依赖的元数据(如 pom 文件)和实际的依赖库(如 jar 文件)。这个过程可能需要一些时间,尤其是在网络条件不佳的情况下。
    3. 初始化脚本执行

      • 尽管你在 init.d 文件夹中配置了 init.gradle,但 Gradle 仍然需要加载和执行这些初始化脚本。如果初始化脚本中有复杂的逻辑或网络请求,也可能会导致延迟。

    解决方案

    1. 启用 Gradle Daemon

      • 确保 Gradle Daemon 已经启动。可以在 ~/.gradle/gradle.properties 文件中添加以下配置:
        org.gradle.daemon=true
        
    2. 增加 Gradle 并发数

      • 增加 Gradle 的并发数可以加快依赖解析和下载速度。在 gradle.properties 中添加:
        org.gradle.parallel=true
        org.gradle.configureondemand=true
        
    3. 使用本地缓存

      • 确保 Gradle 使用本地缓存来存储已经下载的依赖。这样在后续构建时可以直接从本地缓存中获取,而不需要重新下载。

    问题二:初始下载 pom 文件的速度提升

    原因分析

    1. 依赖解析顺序

      • 即使配置了阿里云 Maven 镜像,Gradle 在解析依赖时可能会先尝试从默认的中央仓库或其他仓库下载 pom 文件。只有当这些仓库没有找到对应的 pom 文件时,才会从阿里云镜像下载。
    2. 网络延迟

      • 初始下载的 pom 文件可能来自网络条件较差的仓库,导致下载速度较慢。

    解决方案

    1. 优先使用阿里云镜像

      • build.gradlesettings.gradle 文件中,确保阿里云 Maven 镜像的优先级最高。例如:
        repositories {
         maven { url 'https://maven.aliyun.com/repository/public' }
         mavenCentral()
         jcenter()
        }
        
    2. 使用 Gradle 插件

      • 使用一些 Gradle 插件来优化依赖管理,例如 gradle-build-cache-plugin 可以帮助缓存依赖,减少重复下载。

        plugins {
         id 'com.gradle.build-scan' version '3.1'
        }
        
        buildScan {
         termsOfServiceUrl = 'https://gradle.com/terms-of-service'
         termsOfServiceAgree = 'yes'
        }
        
    3. 预下载依赖

      • 在构建之前,手动下载常用的依赖库并放入本地缓存目录。例如,可以使用以下命令预下载依赖:
        gradle --refresh-dependencies
        

    示例代码

    gradle.properties

    org.gradle.daemon=true
    org.gradle.parallel=true
    org.gradle.configureondemand=true
    

    build.gradle

    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        mavenCentral()
        jcenter()
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        runtimeOnly 'com.h2database:h2'
    }
    

    init.gradle (位于 ~/.gradle/init.d/)

    allprojects {
        repositories {
            maven { url 'https://maven.aliyun.com/repository/public' }
        }
    }
    

    通过以上配置和优化,可以显著提高 Gradle 构建项目的效率和速度。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月12日