Gradle 是一个基于 Java 平台的自动化构建工具,广泛用于构建、测试、部署和管理 Java、Kotlin、Android 等项目的生命周期。以下是 Gradle 的详细用法介绍:
1. Gradle 项目结构
Gradle 项目通常有以下结构:
project-root/
├── src/
│ ├── main/
│ │ ├── java/ # 源代码
│ │ └── resources/ # 资源文件
│ └── test/
│ ├── java/ # 测试代码
│ └── resources/ # 测试资源文件
├── build.gradle # 项目构建脚本
├── settings.gradle # 多项目配置文件
└── gradle/
└── wrapper/ # Gradle Wrapper 文件
2. Gradle 构建脚本
Gradle 的构建脚本是基于 Groovy 或 Kotlin DSL(领域特定语言)编写的,通常命名为 build.gradle
或 build.gradle.kts
(Kotlin 版本)。
2.1 基本语法
- 任务(Task):Gradle 的核心是任务,任务是构建过程中的一个步骤。
- 插件(Plugin):插件为 Gradle 提供预定义的任务和配置。
- 依赖(Dependency):项目所需的库或模块。
2.2 示例:简单的 build.gradle
plugins {
id 'java' // 应用 Java 插件
}
group 'com.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral() // 添加 Maven Central 仓库
}
dependencies {
testImplementation 'junit:junit:4.13.2' // 添加 JUnit 测试依赖
}
3. Gradle 常用命令
Gradle 提供了许多命令行工具来执行构建任务。
3.1 查看任务
gradle tasks
列出项目中所有可用的任务。
3.2 构建项目
gradle build
执行编译、测试和打包任务。
3.3 清理构建
gradle clean
删除构建输出目录(如 build/
)。
3.4 运行测试
gradle test
运行项目中的测试用例。
3.5 查看依赖
gradle dependencies
查看项目的依赖树。
3.6 查看项目结构
gradle projects
查看多项目构建中的子项目。
4. Gradle 依赖管理
Gradle 的依赖管理非常强大,支持多种仓库和依赖类型。
4.1 添加依赖
在 build.gradle
中,使用 dependencies
块添加依赖:
dependencies {
implementation 'org.apache.commons:commons-lang3:3.12.0' // 添加运行时依赖
testImplementation 'junit:junit:4.13.2' // 添加测试依赖
}
4.2 配置仓库
在 build.gradle
中,使用 repositories
块配置依赖仓库:
repositories {
mavenCentral() // Maven Central 仓库
mavenLocal() // 本地 Maven 仓库
maven { url 'https://repo.spring.io/release' } // 自定义仓库
}
4.3 依赖版本管理
可以使用 dependencyConstraints
或 versions
插件来管理依赖版本:
ext {
versions = [
commonsLang: '3.12.0',
junit: '4.13.2'
]
}
dependencies {
implementation "org.apache.commons:commons-lang3:${versions.commonsLang}"
testImplementation "junit:junit:${versions.junit}"
}
5. Gradle 插件
Gradle 插件提供了预定义的任务和配置,可以简化构建过程。
5.1 应用插件
在 build.gradle
中,使用 plugins
块应用插件:
plugins {
id 'java' // Java 插件
id 'com.github.johnrengelman.shadow' version '7.1.2' // Shadow 插件
}
5.2 常见插件
java
:支持 Java 项目。application
:支持可执行 Java 应用。war
:支持 Web 应用打包。android
:支持 Android 项目。spring-boot
:支持 Spring Boot 项目。
6. Gradle 任务
任务是 Gradle 的核心,可以自定义任务或使用插件提供的任务。
6.1 自定义任务
在 build.gradle
中,定义一个自定义任务:
task hello {
doLast {
println 'Hello, Gradle!'
}
}
运行任务:
gradle hello
6.2 任务依赖
任务可以依赖其他任务:
task task1 {
doLast {
println 'Task 1'
}
}
task task2 {
dependsOn task1
doLast {
println 'Task 2'
}
}
运行 task2
会自动执行 task1
。
6.3 任务参数
任务可以接收参数:
task greet {
doLast {
println "Hello, ${project.greeting}!"
}
}
greet {
ext.greeting = 'World'
}
运行任务:
gradle greet -Pgreeting=Earth
7. Gradle Wrapper
Gradle Wrapper 是一个脚本,允许项目在没有安装 Gradle 的环境中运行。
7.1 生成 Wrapper
gradle wrapper
这会在项目中生成 gradlew
和 gradlew.bat
文件。
7.2 使用 Wrapper
./gradlew build
使用 Wrapper 执行构建任务。
8. Gradle 配置技巧
8.1 增量构建
Gradle 支持增量构建,只重新构建发生变化的部分。
8.2 构建缓存
启用构建缓存以提高性能:
enableFeaturePreview('IMPROVED_POM_SUPPORT')
8.3 并行构建
启用并行构建:
gradle --parallel build
9. Gradle 多项目构建
Gradle 支持多项目构建,适合复杂的项目结构。
9.1 示例:多项目结构
root-project/
├── build.gradle
├── settings.gradle
├── subproject1/
│ └── build.gradle
└── subproject2/
└── build.gradle
9.2 配置 settings.gradle
rootProject.name = 'root-project'
include 'subproject1', 'subproject2'
9.3 配置依赖
在 subproject1/build.gradle
中:
dependencies {
implementation project(':subproject2') // 依赖子项目
}
10. Gradle 示例:完整 build.gradle
plugins {
id 'java'
id 'application'
}
group 'com.example'
version '1.0-SNAPSHOT'
application {
mainClass = 'com.example.Main' // 设置主类
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.apache.commons:commons-lang3:3.12.0'
testImplementation 'junit:junit:4.13.2'
}
task runCustom(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
main = 'com.example.CustomMain'
}
总结
Gradle 是一个功能强大的构建工具,支持灵活的配置和扩展。通过构建脚本、任务和插件,可以轻松管理项目的构建、测试和部署过程。掌握 Gradle 的基本用法和常见命令,可以帮助你更高效地开发和管理项目。