1.1 一句话结论
Gradle 用代码写配置,Maven 用 XML 写配置。Gradle 更快、更简洁,代价是刚开始不太顺手。
1.2 配置文件对比
Maven:一个pom.xml(XML,只能描述,不能写逻辑)
Gradle:两个文件:
settings.gradle:写项目名,多模块时列子模块build.gradle:主配置,替代pom.xml
本项目pom.xml有 281 行,迁移后build.gradle约 90 行。
1.3 直接对照:最常见的改法
| 你在 Maven 里写的 | 在 Gradle 里怎么写 |
|---|---|
<groupId>com.own</groupId> | group = 'com.own' |
<version>1.0</version> | version = '1.0' |
<packaging>war</packaging> | plugins { id 'war' } |
<parent> spring-boot-starter-parent </parent> | plugins { id 'org.springframework.boot' version '...' } |
<properties><java.version>1.8</java.version> | sourceCompatibility = '1.8' |
<dependency>...</dependency> | implementation '...' |
<scope>provided</scope> | compileOnly或providedRuntime |
<scope>test</scope> | testImplementation |
<optional>true</optional> | compileOnly+annotationProcessor |
mvn clean package -DskipTests | gradle clean build -x test |
mvn spring-boot:run | gradle bootRun |
1.4 为什么 Gradle 快?
三件事:
- 增量构建:文件没改过的模块直接跳过,不重新编译
- 构建缓存:
gradle clean之后再 build,命中缓存的任务不重跑 - Daemon 进程:JVM 常驻内存,不用每次冷启动
Maven 每次clean package都是从头跑,这是本质差距。
1.5 Scope 对照(重点)
| Maven scope | Gradle 写法 | 说明 |
|---|---|---|
| 默认(compile) | implementation | 最常用 |
provided | compileOnly(库)/providedRuntime(WAR) | 不打入包 |
runtime | runtimeOnly | 如 JDBC 驱动 |
test | testImplementation | |
optional=true | compileOnly+annotationProcessor | 如 Lombok |
1.6 不用纠结的事
- Groovy DSL vs Kotlin DSL:用 Groovy(
.gradle文件),网上资料多,够用 - Gradle 版本:本项目 Java 8 + Spring Boot 2.x,用 Gradle 7.6.4 稳
- 目录结构:
src/main/java、src/main/resources完全不用动