Gradle构建工具 Groovy/Kotlin DSL的现代化自动化构建工具

Gradle介绍

Gradle,Google推出的基于JVM、通用灵活的项目构建工具,支持Maven,JCenter多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml文件,转而使用简洁的、支持多种语言 (例如:java、groovy 等) 的build脚本文件。

Gradle是基于Groovy/Kotlin DSL的现代化自动化构建工具,用来编译代码、管理依赖、打包、测试和部署 Java/Android 等项目。

Gradle DSL,Domain Specific Language,构建专用语法,build.gradle。Gradle 的 "配置方言",用 Groovy或 Kotlin写,专门用来简洁、安全地定义项目怎么构建。

Gradle支持两种语法:build.gradle(Groovy DSL)和 build.gradle.kts(Kotlin DSL)。

创建项目

复制代码
gradle init --type basic --dsl groovy --project-name hello-world
gradle init --type basic --dsl kotlin --project-name hello-world

配置文件说明

build.gradle/build.gradle.kts -> 核心配置文件,项目的构建脚本,定义了项目如何构建、依赖什么库、如何打包。主要内容:插件(Plugins)、依赖(Dependencies)、仓库(Repositories)、自定义任务(Tasks)。

settings.gradle/settings.gradle.kts -> 目的设置文件,在构建的初始化阶段被执行,主要作用是定义项目结构和全局配置。主要内容:根项目名称、包含子项目、插件管理。Gradle 启动时最先读取此文件,以确定构建的范围。

gradlew -> 执行脚本,用于Linux/macOS系统的Shell脚本。没有预先安装Gradle的环境下,都能使用项目指定的Gradle版本进行构建。

gradlew.bat -> 执行脚本,用于Windows​系统的批处理脚本。在项目根目录运行./gradlew build(Mac/Linux)或 gradlew build(Windows),它会自动下载并使用正确的Gradle版本。

gradle/wrapper/gradle-wrapper.jar -> Gradle Wrapper的核心逻辑实现JAR包,执行gradlew命令时,脚本实际上会启动这个JAR包,它会负责检查本地是否有gradle-wrapper.properties中指定的Gradle发行版。如果没有,会自动从网络下载并安装到用户目录下的 .gradle/wrapper/dists/中,然后使用该发行版来执行构建。

gradle/wrapper/gradle-wrapper.properties -> Wrapper 的配置文件,用于指定使用哪个版本的Gradle。distributionUrl,指定了 Gradle 发行版的下载地址;distributionBase和 distributionPath:指定下载后存放的基目录和路径;zipStoreBase和zipStorePath:指定下载的 ZIP 包存放位置。gradlew脚本--> gradle-wrapper.jar(读取gradle-wrapper.properties)。

Gradle生命周期

安装Gradle

安装并配置环境变量(Path环境变量添加Gradle安装路径),gradle -v。

Idea创建Gradle项目

执行流程:

1、IDEA中运行构建,就触发了Gradle命令,相当于手动执行:gradle build,

2、加载项目根目录/子模块的settings.gradle、build.gradle(settings.gradle在build.gradle 之前执行)DSL脚本,解析配置、插件、依赖、任务。

3、初始化Gradle生命周期:初始化 → 配置阶段 → 执行阶段

4、下载缺失依赖包(从 Maven 等仓库拉到本地缓存)。

5、执行一系列内置任务:源码编译 → 处理资源文件 → 编译测试代码 → 运行单元测试 → 校验代码 → 打包 Jar/War。

6、输出产物到 build/libs 目录,同时把构建日志返回给IDEA展示。

生命周期,Gradle运行时有三个主要的生命周期阶段:初始化 (Initialization)、配置 (Configuration)​ 和 执行 (Execution)。

项目中settings.gradle文件:

复制代码
// ==========================================
// 阶段 1:初始化阶段(最先执行)
// ==========================================
println "🔵 【阶段1】初始化 → settings.gradle 执行"

// 必须写在这里,beforeProject 才会生效
gradle.projectsLoaded {
    println "🟢 项目加载完成,开始注册监听"

    gradle.beforeProject { project ->
        println "🟡 【beforeProject 执行】即将配置项目:${project.name}"
    }
}

rootProject.name = 'hello'

项目中build.gradle文件:

复制代码
plugins {
    id 'java'
}

// ==========================================
// 阶段 2:配置阶段
// ==========================================
println "🟠 【阶段2】配置 → build.gradle 执行"

group = 'org.tangbao'
version = '1.0-SNAPSHOT'

repositories {
    mavenLocal()
    maven { url 'https://maven.aliyun.com/repository/public/' }
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

// 执行阶段
gradle.taskGraph.whenReady {
    println "🟢 【阶段3】执行 → 任务准备完成,开始运行"
}

// 编译任务执行
tasks.compileJava {
    doFirst {
        println "🔨 执行任务:compileJava 编译代码中"
    }
}

// 构建结束
gradle.buildFinished {
    println "✅ 【阶段4】构建完成!"
}
相关推荐
chuntian_tester几秒前
AI自动化第3步【用例设计】
人工智能·测试工具·ai·自动化
hai_android19 分钟前
Kotlin 协程作用域源码剖析
android·kotlin
点心的游戏开发世界27 分钟前
GDScript 入门笔记:目录
开发语言·笔记·游戏引擎·godot
洋不写bug34 分钟前
二叉树(二) 常见基础操作解析|结点数、树高、查找结点、判断完全二叉树
java·开发语言·数据结构·完全二叉树·二叉树结点数·树高·查找结点
果果燕37 分钟前
实习笔记(六)主机按钮状态上报完整流程
开发语言·c++·php
平头哥技术团队1 小时前
Day 16 | 用 ul、ol、li 一个标签,把散资料收成有序的技能清单页
开发语言·前端·html·html5
统计学小王子1 小时前
数学建模国赛倒计时 2 天 ——《统计模型精讲(广义线性模型 R 语言实例 + 分析)》
开发语言·数学建模·r语言
此冬歌咏1 小时前
自动化服务器运维监控系统(python+shell)
linux·运维·服务器·开发语言·python·自动化
Cx330❀2 小时前
【Linux网络】深入TCP协议:从滑动窗口到拥塞控制与性能优化全景解析
linux·开发语言·网络·tcp/ip·ai·性能优化·ai编程
自动化监测Learner2 小时前
自动化监测数据传不出廊道?大坝通信组网选型实战:RS485、光纤、4G、LoRa、北斗短报文一篇讲透
运维·网络·自动化