Gradle是一个基于Groovy/Kotlin DSL的现代化构建工具,相比Maven更加灵活高效。以下是使用Gradle构建Java项目的全面指南。
基础项目结构
标准的Gradle Java项目结构如下:
my-java-project/
├── build.gradle // 构建脚本
├── settings.gradle // 项目设置文件
├── gradle.properties // Gradle属性配置
├── gradlew // Gradle包装器脚本(Unix)
├── gradlew.bat // Gradle包装器脚本(Windows)
└── src/
├── main/
│ ├── java/ // 主Java源代码
│ └── resources // 主资源文件
└── test/
├── java/ // 测试Java代码
└── resources // 测试资源文件
基础构建脚本 (build.gradle)
plugins {
id 'java' // 应用Java插件
}
group 'com.example'
version '1.0.0'
repositories {
mavenCentral() // 使用Maven中央仓库
}
dependencies {
// 实现依赖(编译+运行时)
implementation 'org.apache.commons:commons-lang3:3.12.0'
// 仅编译时需要的依赖
compileOnly 'org.projectlombok:lombok:1.18.24'
annotationProcessor 'org.projectlombok:lombok:1.18.24'
// 测试依赖
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'
}
test {
useJUnitPlatform() // 使用JUnit5
}
依赖管理
依赖配置
Gradle的依赖配置比Maven更细粒度:
implementation
– 项目主代码的编译和运行时依赖compileOnly
– 仅编译时需要runtimeOnly
– 仅运行时需要testImplementation
– 测试代码的编译和运行时依赖testCompileOnly
– 测试代码仅编译时需要testRuntimeOnly
– 测试代码仅运行时需要annotationProcessor
– 注解处理器
依赖版本管理
推荐使用libs.versions.toml
统一管理版本(新特性):
- 在
gradle
目录下创建libs.versions.toml
文件
[versions]
junit = "5.9.3"
lombok = "1.18.28"
[libraries]
junit-bom = { module = “org.junit:junit-bom”, version.ref = “junit” } junit-jupiter = { module = “org.junit.jupiter:junit-jupiter”, version.ref = “junit” } lombok = { module = “org.projectlombok:lombok”, version.ref = “lombok” }
- 在build.gradle中引用:
dependencies {
implementation(libs.junit.jupiter)
compileOnly(libs.lombok)
annotationProcessor(libs.lombok)
}
多模块项目
- 在
settings.gradle
中定义子模块:
rootProject.name = 'my-multi-project'
include 'core', 'web', 'data'
- 子模块的build.gradle示例:
plugins {
id 'java-library' // 库模块使用java-library插件
}
dependencies {
api project(':core') // 暴露core模块的API
implementation project(':data') // 内部实现依赖
}
常用任务
- 编译项目:
./gradlew build
- 运行测试:
./gradlew test
- 清理构建:
./gradlew clean
- 生成IDE项目文件:
./gradlew eclipse
或./gradlew idea
- 查看依赖树:
./gradlew dependencies
- 检查依赖更新:
./gradlew dependencyUpdates
自定义构建
自定义任务
task printVersion {
doLast {
println "Project version: ${version}"
}
}
自定义属性
在gradle.properties
中:
org.gradle.jvmargs=-Xmx2g
org.gradle.parallel=true
或在build.gradle中:
ext {
springVersion = '5.3.23'
}
dependencies {
implementation "org.springframework:spring-core:$springVersion"
}
构建缓存与性能优化
- 启用构建缓存:
buildCache {
local {
directory = new File(rootDir, 'build-cache')
removeUnusedEntriesAfterDays = 30
}
}
- 并行构建:
# gradle.properties
org.gradle.parallel=true
org.gradle.caching=true
与Maven的比较优势
- 更快的构建速度(增量构建更智能)
- 更灵活的DSL配置
- 更好的多项目构建支持
- 丰富的插件生态系统
- 支持Kotlin DSL(替代Groovy)
迁移建议
如果从Maven迁移到Gradle:
- 使用
gradle init
命令生成基础构建文件 - 逐步迁移依赖配置
- 保持Maven构建文件直到Gradle构建稳定
- 利用Gradle的兼容性特性(如Maven Publish插件)
Gradle的灵活性和性能优势使其成为现代Java项目的首选构建工具,特别是对于大型复杂项目。