当前位置: 首页 > news >正文

Gradle 配置教程:与 Maven 对比详解(含完整迁移指南)

一、基础对比:Gradle vs Maven

1.1 核心特性对比

维度MavenGradle
配置语言XML (冗长)Groovy/Kotlin DSL (简洁灵活)
构建速度较慢(全量构建)快2-10倍(增量构建+缓存)
多模块管理<modules> + <parent>settings.gradle + project()
依赖管理<dependencies>dependencies { ... }
插件系统声明式编程式(可自定义逻辑)
学习曲线低(XML基础)中(需Groovy/Kotlin基础)

1.2 安装与配置对比

Maven 安装流程
wget https://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.zip
unzip apache-maven-3.9.6-bin.zip
export MAVEN_HOME=/path/to/apache-maven-3.9.6
export PATH=$MAVEN_HOME/bin:$PATH
mvn -v  # 验证安装
Gradle 安装优势
wget https://services.gradle.org/distributions/gradle-8.5-bin.zip
unzip gradle-8.5-bin.zip
export GRADLE_HOME=/path/to/gradle-8.5
export PATH=$GRADLE_HOME/bin:$PATH
gradle -v  # 验证安装

​Gradle优势:​

  • 守护进程(Daemon)减少JVM启动时间
  • 支持Gradle Wrapper(无需全局安装)
  • Kotlin DSL提供类型安全

1.3 项目结构对比

Maven 标准结构
my-project/
├── pom.xml
└── src/├── main/│   ├── java/│   └── resources/└── test/├── java/└── resources/
Gradle 标准结构
my-project/
├── build.gradle
├── settings.gradle
└── src/├── main/│   ├── java/│   └── resources/└── test/├── java/└── resources/

​关键差异:​

  • settings.gradle管理多模块和项目名称
  • 构建逻辑在build.gradle而非pom.xml

1.4 构建脚本深度对比

Maven 配置示例
<!-- pom.xml -->
<project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-app</artifactId><version>1.0.0</version><properties><java.version>11</java.version></properties><dependencies><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.3</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin></plugins></build>
</project>
Gradle 等效配置
// build.gradle (Groovy DSL)
plugins {id 'java'id 'org.jetbrains.kotlin.jvm' version '1.9.22' // 可选Kotlin支持
}group = 'com.example'
version = '1.0.0'repositories {mavenCentral()
}java {toolchain {languageVersion = JavaLanguageVersion.of(11)}
}dependencies {testImplementation 'org.junit.jupiter:junit-jupiter:5.9.3'// Kotlin示例: implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}tasks.withType(Test) {useJUnitPlatform()
}

1.5 多模块项目配置

Maven 多模块配置
<!-- 父pom.xml -->
<modules><module>core</module><module>web</module>
</modules><!-- 子模块pom.xml -->
<parent><groupId>com.example</groupId><artifactId>parent</artifactId><version>1.0.0</version>
</parent>
Gradle 多模块配置
// settings.gradle
rootProject.name = 'my-app'
include 'core', 'web'// web/build.gradle
dependencies {implementation project(':core')// 可添加外部依赖implementation 'org.springframework.boot:spring-boot-starter-web:3.1.5'
}

1.6 构建任务对比

任务Maven 命令Gradle 命令
编译mvn compilegradle classes
运行测试mvn testgradle test
打包mvn packagegradle assemble
安装到本地mvn installgradle publishToMavenLocal
生成网页mvn sitegradle javadoc
清理mvn cleangradle clean
依赖分析mvn dependency:treegradle dependencies
运行应用mvn exec:javagradle run

1.7 性能优化对比

优化技术Maven实现Gradle实现
增量构建基于时间戳基于内容哈希
并行构建<maven.compile.parallel>true</maven.compile.parallel>org.gradle.parallel=true (gradle.properties)
构建缓存无内置支持本地+远程缓存
任务依赖优化手动配置自动分析任务依赖关系
守护进程Gradle Daemon

二、Maven 快速转 Gradle 迁移指南

2.1 自动转换工具

gradle init --type pom

​交互式配置:​

Select build script DSL:1: Groovy2: Kotlin
> 2  # 推荐选择Kotlin DSLGenerate build using new APIs and behavior (some may be incompatible with existing scripts)?
> yes

​生成文件结构:​

.
├── build.gradle.kts       # 主构建脚本
├── settings.gradle.kts    # 项目配置
├── gradlew                # Unix构建脚本
├── gradlew.bat            # Windows构建脚本
└── gradle/                # Gradle包装器

2.2 手动调整关键配置

依赖作用域映射表
Maven 作用域Gradle 配置特殊说明
compileimplementation默认转换结果
testtestImplementation自动转换
providedcompileOnly需手动检查Web容器依赖
runtimeruntimeOnly需确认是否真的需要
system❌ 不支持建议改用文件依赖或Maven仓库

​修正示例:​

dependencies {// 修正Servlet API依赖compileOnly("javax.servlet:javax.servlet-api:4.0.1")// 文件依赖示例implementation(files("lib/custom-lib.jar"))
}

2.3 插件转换对照表

Maven 插件Gradle 等效配置
maven-compiler-plugin内置Java插件,配置java.toolchain
spring-boot-maven-plugin添加org.springframework.boot插件
maven-surefire-plugin内置测试支持
maven-jar-plugin使用jar任务配置
maven-assembly-plugin使用DistributionPlugin

​Spring Boot项目配置:​

plugins {id("org.springframework.boot") version "3.1.5"id("io.spring.dependency-management") version "1.1.3"
}tasks.named<BootJar>("bootJar") {archiveBaseName = "my-app"archiveVersion = "1.0.0"
}

2.4 多模块项目配置

​根项目配置 (settings.gradle.kts):​

rootProject.name = "parent.project"
include("module-core","module-web","module-service:submodule-a",  // 支持嵌套模块"module-service:submodule-b"
)

​子模块依赖配置:​

// module-web/build.gradle.kts
dependencies {implementation(project(":core"))implementation("com.google.guava:guava:32.1.3-jre")
}

三、性能优化方案

3.1 构建加速配置

// 启用配置缓存(Gradle 8.0+)
tasks.withType<ConfigurationCache> {mode = ConfigurationCache.Mode.REMOTE
}// 分布式缓存配置
buildCache {remote<HttpBuildCache> {url = uri("https://cache.internal")credentials {username = "cache-user"password = "secret"}}
}

3.2 常见问题解决方案

问题类型解决方案
依赖冲突configurations.all { resolutionStrategy.force("com.google.guava:guava:32.1.3-jre") }
构建速度慢启用 --parallel + 配置 org.gradle.workers.max=8
测试失败缓存test { outputs.upToDateWhen { false } }
资源处理异常添加 processResources { duplicatesStrategy = DuplicatesStrategy.INCLUDE }

四、验证与调试

4.1 构建验证流程

# 清洁构建
./gradlew clean build# 测试验证
./gradlew test --info       # 显示测试日志
./gradlew test --continue   # 继续执行失败后的测试# 产物检查
unzip -l build/libs/my-app.jar  # 检查JAR内容
jar tf build/libs/my-app.war    # 检查WAR内容

4.2 依赖分析工具

# 生成依赖树
./gradlew :module-name:dependencies > deps.txt# 可视化依赖报告
./gradlew htmlDependencyReport  # 生成HTML报告# 依赖冲突检测
./gradlew dependencyInsight --dependency guava --configuration runtimeClasspath

4.3 构建扫描分析

./gradlew build --scan

​关键指标检查:​

  • 任务执行时间分布
  • 依赖下载时间
  • 缓存命中率
  • 配置时间占比

五、迁移后优化建议

5.1 构建脚本重构

// settings.gradle.kts
dependencyResolutionManagement {repositories {mavenCentral()google()maven { url = uri("https://plugins.gradle.org/m2/") }}
}

5.2 CI/CD 集成示例

# .github/workflows/build.yml
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Setup JDKuses: actions/setup-java@v3with:java-version: '17'- name: Gradle Buildrun: ./gradlew build --scanenv:GRADLE_OPTS: "-Dorg.gradle.caching=true"

5.3 监控仪表盘配置

./gradlew build --scan --metrics
# 生成包含以下指标的报告:
# - 任务执行时间分布
# - 依赖下载耗时
# - 内存使用峰值
# - 配置时间占比

 

http://www.dtcms.com/a/328105.html

相关文章:

  • methods和computed的区别
  • tlias智能学习辅助系统--Maven高级-继承
  • 北京JAVA基础面试30天打卡08
  • C++动态代理技术详解:实现原理与应用场景
  • Java静态代理和动态代理
  • Linux驱动开发probe字符设备的完整创建流程
  • 【游戏优化笔记】开发中如何减少建筑和树木等环境元素的资源消耗?
  • 【RHCE】自动化备份全网服务器数据平台
  • 36-综合案例开发-2
  • Chrome插件开发【manifest.json】
  • 【传奇开心果系列】Flet框架桌面程序组件Custom Ribbon自定义组件模板
  • Class34锚框
  • 分享单位开通固定公网IP,不需要找运营商申请
  • sqli-libs通关教程(41-50)
  • lesson36:MySQL从入门到精通:全面掌握数据库操作与核心原理
  • Elasticsearch JS 客户端子客户端(Child Client)实践指南
  • DAY38作业(补)
  • CTO如何通过录音转写和音频降噪,提升企业远程协作效率?
  • Secure 第四天作业
  • Linux环境部署RocketMQ
  • C++算法·排序
  • 第六十四章:AI的“觅食”之路:数据采集器设计与多源数据获取
  • DL-FWI 的三项主要任务: 网络构建, 数据生成, 训练控制
  • 跑腿APP开发未来趋势:同城O2O系统源码在智能调度与个性化中的进化
  • Spring Boot项目中调用第三方接口
  • HCIP项目之OSPF综合实验
  • Flux.1系列模型解析--Kontext
  • 8月12号打卡
  • 【Leetcode hot 100】560.和为K的子数组
  • 无人机航拍数据集|第13期 无人机城市斑马线目标检测YOLO数据集963张yolov11/yolov8/yolov5可训练