Gradle使用

Gradle相关目录

https://docs.gradle.org/current/userguide/directory_layout.html#dir:gradle_user_home

  1. GRADLE_HOME:Gradle安装目录
  2. Gradle User Home

默认 ~/.gradle或者 C:\Users\<USERNAME>\.gradle,用于存放全局配置属性,初始化脚本,缓存,日志等

可由GRADLE_USER_HOME环境变量控制

echo $GRADLE_USER_HOME  		# Shell
echo $env:GRADLE_USER_HOME 		# PowerShell

依赖管理

版本锁定 Version Catalog

https://docs.gradle.org/current/userguide/version_catalogs.html

gradle/libs.versions.toml

排除依赖

HTTP代理配置

参考官方文档:https://docs.gradle.org/current/userguide/networking.html

GRADLE_USER_HOME/gradle.properties 文件中配置

# 配置HTTP proxy
systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=de\\username
systemProp.http.proxyPassword=xxx

# 配置HTTPS代理
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost

仓库配置

https://docs.gradle.org/current/userguide/declaring_repositories_basics.html

  1. 全局 init 脚本:init.gradle 中配置
  2. 配置项目级别的仓库地址

依赖仓库配置

默认是jcenter、可以是mavenCentral

plugins {
    id 'java'
}

repositories {
    // 按顺序查找,建议将常用仓库放在前面
    mavenLocal()                    // 本地仓库
    mavenCentral()                  // Maven 中央仓库
    google()                        // Google 仓库
    maven {                         // 自定义仓库
        url "https://jitpack.io"    // JitPack 仓库
    }
    maven {                         // 需要认证的仓库
        url "https://repo.company.com/repository/maven-releases/"
        credentials {
            username = project.findProperty("repoUser") ?: System.getenv("REPO_USER")
            password = project.findProperty("repoPassword") ?: System.getenv("REPO_PASSWORD")
        }
    }
}

dependencies {
    implementation 'com.google.guava:guava:31.0.1-jre'
}

仓库优先级

常用仓库URL

repositories {
    // 阿里云镜像(国内推荐)
    maven { url 'https://maven.aliyun.com/repository/public' }
    maven { url 'https://maven.aliyun.com/repository/google' }
    maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
  
    // 华为云镜像
    maven { url 'https://repo.huaweicloud.com/repository/maven' }
  
    // 腾讯云镜像
    maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
  
    // Spring 仓库
    maven { url 'https://repo.spring.io/release' }
  
    // JitPack
    maven { url 'https://jitpack.io' }
}

插件仓库配置

pluginManagement {
    repositories {
        gradlePluginPortal()    // Gradle 插件门户
        mavenCentral()
        google()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
}

dependencyResolutionManagement {
    repositories {
        mavenCentral()
        google()
        maven {
            url "https://jitpack.io"
        }
    }
}

rootProject.name = 'my-project'
include 'app', 'lib'

查看配置

./gradlew projects          # 查看所有子项目
./gradlew tasks             # 查看所有可用任务
./gradlew properties        # 查看所有 Gradle 属性

./gradlew dependencies      # 查看项目依赖树
./gradlew dependencyInsight --dependency <name>  # 分析特定依赖
./gradlew buildEnvironment  # 查看构建脚本的依赖

./gradlew build --scan      # 执行构建并生成详细的构建分析报告
# 或者明确使用构建扫描插件
./gradlew build --scan --no-daemon

./gradlew --version         # 显示 Gradle、JVM、OS 版本信息
./gradlew --status          # 查看 Gradle 守护进程状态
./gradlew --stop            # 停止所有 Gradle 守护进程

./gradlew build --info      # 详细信息级别
./gradlew build --debug     # 调试级别(非常详细)
./gradlew build --stacktrace # 显示堆栈跟踪

强制清除缓存

gradle build --refresh-dependencies

明确知道本地gradle仓库位置可以手动删除

一般需要删除.gradle\caches\modules-2\files-2.1和.gradle\caches\modules-2\metadata-2.71\descriptors目录下的对应jar文件就可以

Gradle Wrapper

同Maven Wrapper类似。

$MyProject\gradle
└─wrapper
	└─ gradle-wrapper.properties
	└─ gradle-wrapper.jar

官方的各个版本的代理下载地址:https://services.gradle.org/distributions/

如果 gradle 初次构建缓慢,可以手动下载代理放到${USER}/.gradle/wrapper/dists下

Wrapper 下载的 Gradle 发行版会缓存在本地 GRADLE_USER_HOME 目录(通常是 ~/.gradle/wrapper/dists/)中。

  1. gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
# 下载地址
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
  1. gradle-wrapper.jar:下载过程可以通过查看 gradle-wrapper.jar 中的代码查看其逻辑

常用命令

查看 Gradle Wrapper 使用的 Gradle 版本

.\gradlew -v

------------------------------------------------------------
Gradle 8.8
------------------------------------------------------------

Build time:   2024-05-31 21:46:56 UTC
Revision:     4bd1b3d3fc3f31db5a26eecb416a165b8cc36082

Kotlin:       1.9.22
Groovy:       3.0.21
Ant:          Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM:          17.0.7 (Oracle Corporation 17.0.7+8-LTS-224)
OS:           Windows 11 10.0 amd64

下载缓慢问题

修改了gradle-wrapper.properties中使用的版本后,点击Sync Projects,会去下载对应版本的gradle

解决办法

  1. 开VPN
  2. 使用镜像地址下载,更换url中具体的版本即可,以8.8版本为例:
    (1)官网地址:https://services.gradle.org/distributions/gradle-8.8-bin.zip
    (2)腾讯镜像 Gradle下载地址:https://mirrors.cloud.tencent.com/gradle/gradle-8.8-bin.zip
    (3)阿里云镜像 Gradle下载地址:https://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.8-bin.zip
  distributionUrl=https://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.8-bin.zip
  1. 到官网下载https://services.gradle.org/distributions/,注意下载名字带 -bin的压缩包,这个是二进制包。直接下载的链接:https://services.gradle.org/distributions/gradle-8.6-bin.zip,替换成想要的版本号即可。

下载过后,找到 $GRADLE_USER_HOME\wrapper目录,找到对应版本,放入你完整下载的Gradle安装包并解压。如下所示:

➜ $GRADLE_USER_HOME\wrapper> tree .
└─dists
    ├─gradle-8.14-bin
    │  └─38aieal9i53h9rfe7vjup95b9
    │      └─gradle-8.14	# 压缩包解压后的根目录
    │          ├─bin
    │          ├─init.d
    │          └─lib
    │              ├─agents
    │              └─plugins
    ├─gradle-8.2-bin
    │  └─bbg7u40eoinfdyxsxr3z4i7ta

gradle文件夹的绝对路径下没有对应Gradle版本的文件夹和一长串字符的文件夹,一长串字符的文件夹是必须要用开始下载该版本的Gradle安装包才生成的。所以如果没有这个一长串字符的文件夹,需要先进行一次下载操作。只要下载的内容大小有超过0.01MB,就能看见这个一长串字符的文件夹了,接着你就可以关闭Intellij Idea,找到这个一长串字符的文件夹,删除未下载完的临时文件,并放入你完整下载的Gradle安装包并解压,再打开Intellij Idea就会直接跳过该版本的Gradle下载过程啦,直接进入项目构建环节了。

如果按上面操作,重新打开Idea,刷新gradle时,出现Read Timeout,需要删除一长串字符的文件夹,重新生成一次,然后再按上述步骤再来一次

Idea配置 HTTP 代理

配置入口:File | Settings | Appearance & Behavior | System Settings | HTTP Proxy

alt text

配置如下:

  1. Host name为代理地址
  2. Login、Password分别为代理访问用户名及密码

通过Check connection输入请求地址,如果是访问外网,可以尝试直接访问 youtube 或者 google 来验证:https://www.youtube.com/

构建配置

本地建立文件 gradle.properties 或者在用户的 .gradle目录下建立 gradle.properties 文件作为全局设置,参数有

# 开启并行编译
org.gradle.parallel=true
# 开启守护进程
org.gradle.daemon=true
# 按需编译
org.gradle.configureondemand=true
# 设置编译jvm参数
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 设置代理
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10384
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=10384
# 开启JNI编译支持过时API
android.useDeprecatedNdk=true

构建问题排查

--stacktrace:
--info:

--debug:输出 debug 日志
--scan

Debug断点执行

-Dorg.gradle.debug=true --no-daemon

例如:gradle nameOfTask -Dorg.gradle.debug=true --no-daemon

常用构建命令

# 查看任务
./gradlew tasks
# 查看所有任务 包括缓存任务等
./gradlew tasks --all
# 对某个module [moduleName] 的某个任务[TaskName] 运行
./gradlew :moduleName:taskName
# 查看构建版本
./gradlew -v
# 清除build文件夹
./gradlew clean
# 检查依赖并编译打包
./gradlew build
# 编译并安装debug包
./gradlew installDebug
# 编译并打印日志
./gradlew build --info
# 译并输出性能报告,性能报告一般在 构建工程根目录 build/reports/profile
./gradlew build --profile
# 调试模式构建并打印堆栈日志
./gradlew build --info --debug --stacktrace
# 强制更新最新依赖,清除构建并构建
./gradlew clean build --refresh-dependencies

常见问题

  1. 卡在 Importing Project 阶段

image

  1. 更换仓库地址后不生效

当第一次下载依赖失败时,更换仓库地址后,还是报错上次的仓库地址,已确认未使用报错信息里的仓库地址

A problem occurred configuring project ':mybatisx-plugin'.
> Could not resolve all artifacts for configuration ':mybatisx-plugin:classpath'.
   > Could not find structure-base-3.318.jar (org.jetbrains.intellij.plugins:structure-base:3.318).
     Searched in the following locations:
         https://maven.aliyun.com/repository/public/org/jetbrains/intellij/plugins/structure-base/3.318/structure-base-3.318.jar

Possible solution:
 - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
  1. The request for this plugin could not be satisfied because the plugin is already on the classpath with an unknown version, so compatibility cannot be checked.

https://github.com/gradle/gradle/issues/20084

  1. gradle构建脚本飘红, 报错: cannot resolve buildScript, 但是可以正常运行

清除Idea缓存,Invalid Caches and Restart,重启后重新刷新

  1. org.gradle.api.internal.provider.MissingValueException: Cannot query the value of this provider because it has no value available.
posted @ 2025-10-14 20:58  vonlinee  阅读(12)  评论(0)    收藏  举报