Gradle:task 图、Wrapper 与常用命令
更新时间:2026-09-20。Gradle 是 Maven 之外的主流 JVM 构建工具,Android 生态默认用它,特点是灵活的 task 依赖图与增量缓存。对照 Maven 生命周期与 pom,底层同样调用 javac/java。
一、最重要的是 Wrapper
./gradlew build # Linux/macOS
gradlew.bat build # Windowsgradlew(Wrapper)会按 gradle/wrapper/gradle-wrapper.properties 指定的版本自动下载并运行 Gradle,全队与 CI 用同一版本,无需本机预装。升级用 ./gradlew wrapper --gradle-version 8.7。
二、build.gradle(Kotlin DSL 示例)
plugins {
java
application
}
repositories {
mavenCentral() // 也可配 maven { url = uri("私服URL") } 镜像
}
dependencies {
implementation("org.slf4j:slf4j-api:2.0.13") // 实现依赖,不泄露给消费者编译期
api("com.google.guava:guava:33.0.0-jre") // 会出现在消费者编译 classpath
compileOnly("javax.servlet:javax.servlet-api:4.0.1") // ≈ provided
runtimeOnly("mysql:mysql-connector-j:8.4.0") // ≈ runtime
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}
application { mainClass.set("com.demo.Main") }三、依赖配置与 Maven scope 对照
| Gradle 配置 | 大致对应 Maven | 是否泄露给上游编译期 |
|---|---|---|
implementation | compile(但不传递暴露) | 否,改实现不触发下游重编译 |
api | compile(传递暴露) | 是,出现在消费者 classpath |
compileOnly | provided | 否,运行期需另给 |
runtimeOnly | runtime | 仅运行期 |
testImplementation | test | 仅测试 |
implementation 与 api 的区别是 Gradle 相对 Maven 最实用的改进:默认用 implementation,只有「作为公开方法签名类型暴露」的库才用 api,能显著减少重编译范围。
四、常用命令
./gradlew build # 完整构建:编译+测试+检查+打包
./gradlew clean build # 清产物再构建
./gradlew test # 跑测试
./gradlew assemble # 只打包不跑检查
./gradlew bootRun # Spring Boot 插件:直接运行
./gradlew build -x test # -x 排除某任务(跳过测试)
./gradlew test --tests '*OrderService*' # 过滤测试
./gradlew --stop # 停掉常驻 daemon
./gradlew dependencies --configuration runtimeClasspath # 看依赖树- Gradle 任务不是 Maven 那样的固定阶段,而是有向无环图,命令行写任务名,任务之间用
dependsOn连边; - 增量构建:输入输出没变的 task 会标
UP-TO-DATE跳过,配合本地/远程构建缓存,大项目比 Maven 快; - daemon 常驻减少 JVM 启动开销,CI 里有时为隔离用
--no-daemon。
五、多模块
settings.gradle(.kts) 里 include("order-api","order-service"),子模块各自 build.gradle,模块间用 implementation(project(":order-api")) 依赖,./gradlew :order-service:build 只构建某模块。
六、Gradle 还是 Maven
- 企业后端、团队偏好强约定和声明式、上手简单:Maven 依旧稳妥;
- Android、多模块超大工程、需要自定义任务/灵活编排、追求构建速度与缓存:Gradle 更合适。
- 两者依赖范围概念可互译,排查
NoSuchMethodError一类版本冲突的思路一致:先看依赖树再锁版本。
总结
Gradle 用 task 依赖图代替 Maven 固定生命周期,靠 Wrapper(gradlew) 锁定并自举版本、靠增量构建和缓存提速;依赖上默认用 implementation(不向上游暴露、减少重编译),只有进入公开 API 的库才用 api,compileOnly/runtimeOnly/testImplementation 分别对应 provided/runtime/test;常用 build/clean/test/assemble,-x test 跳过任务、--tests 过滤、dependencies 查依赖树;多模块在 settings 里 include 并用 project() 互依;选型上 Android 与大多模块工程用 Gradle,重约定、求简单用 Maven。