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

Gradle vs Maven 详细对比

一、基本概念

| 特性 | Maven | Gradle | |------|-------|--------| | 配置文件 | XML(pom.xml) | Groovy/Kotlin DSL(build.gradle) | | 设计理念 | 约定优于配置 | 灵活、可编程 | | 构建语言 | XML(声明式) | Groovy/Kotlin(脚本式) |


二、配置文件格式对比

Maven(XML 格式)
  1. <!-- pom.xml - 您的后端项目 --> 
  2. <project> 
  3.     <groupId>com.mapnotify</groupId> 
  4.     <artifactId>map-notify</artifactId> 
  5.     <version>1.0.0</version> 
  6.     <dependencies> 
  7.         <dependency> 
  8.             <groupId>org.springframework.boot</groupId> 
  9.             <artifactId>spring-boot-starter-web</artifactId> 
  10.         </dependency> 
  11.     </dependencies> 
  12.     <build> 
  13.         <plugins> 
  14.             <plugin> 
  15.                 <groupId>org.springframework.boot</groupId> 
  16.                 <artifactId>spring-boot-maven-plugin</artifactId> 
  17.             </plugin> 
  18.         </plugins> 
  19.     </build> 
  20. </project>

特点: - XML 格式,结构固定 - 标签嵌套,较冗长 - 声明式,配置为主

Gradle(Groovy DSL 格式)
// build.gradle - 您的Android项目
plugins {id 'com.android.application'
}android {namespace 'com.mapnotify.app'compileSdk 33defaultConfig {applicationId "com.mapnotify.app"minSdk 21}
}dependencies {implementation 'androidx.appcompat:appcompat:1.6.1'implementation 'cn.jiguang.sdk:jpush:5.1.6'
}

特点: - Groovy/Kotlin DSL,更简洁 - 类似代码,可编程 - 支持条件逻辑和自定义任务


三、依赖管理对比

Maven 依赖声明
<!-- pom.xml -->
<dependencies><!-- 需要指定 groupId, artifactId, version --><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.40</version></dependency><!-- 作用域用 scope --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
Gradle 依赖声明
// build.gradle
dependencies {// 简洁格式:group:artifact:versionimplementation 'androidx.appcompat:appcompat:1.6.1'// 极光推送SDKimplementation 'cn.jiguang.sdk:jpush:5.1.6'implementation 'cn.jiguang.sdk:jcore:3.0.0'// 测试依赖用 testImplementationtestImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.5'
}

对比:

| Maven | Gradle | 说明 | |-------|--------|------| | <scope>compile</scope> | implementation | 编译和运行时依赖 | | <scope>provided</scope> | compileOnly | 仅编译时 | | <scope>test</scope> | testImplementation | 测试依赖 | | <scope>runtime</scope> | runtimeOnly | 仅运行时 |


四、构建生命周期对比

Maven 生命周期(固定阶段)
# Maven 有固定的生命周期阶段
mvn clean          # 清理
mvn compile        # 编译
mvn test           # 测试
mvn package        # 打包(生成JAR/WAR)
mvn install        # 安装到本地仓库
mvn deploy         # 部署到远程仓库

Maven 生命周期:

clean → validate → compile → test → package → verify → install → deploy
Gradle 任务(灵活自定义)
# Gradle 使用任务(Task)系统
./gradlew clean              # 清理
./gradlew build              # 构建
./gradlew assembleDebug      # 打包Debug版本(Android)
./gradlew assembleRelease    # 打包Release版本
./gradlew installDebug       # 安装Debug版本到设备

Gradle 任务示例:

// 可以自定义任务
task hello {doLast {println 'Hello Gradle!'}
}// Android项目自动生成的任务
// assembleDebug, assembleRelease, installDebug 等

五、打包方式对比

Maven 打包(Spring Boot)
<!-- pom.xml -->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

打包命令:

mvn clean package
# 生成:target/map-notify-1.0.0.jar
# 这是一个可执行的JAR文件(包含所有依赖)
Gradle 打包(Android)
// build.gradle
android {buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt')}debug {minifyEnabled false}}
}

打包命令:

./gradlew assembleDebug
# 生成:app/build/outputs/apk/debug/app-debug.apk./gradlew assembleRelease
# 生成:app/build/outputs/apk/release/app-release.apk

区别:

| 项目类型 | Maven | Gradle | |---------|-------|--------| | Java项目 | 生成 .jar 文件 | 生成 .jar 文件 | | Spring Boot | 生成可执行 .jar | 生成可执行 .jar | | Android | ❌ 不支持 | ✅ 生成 .apk 文件 | | Web项目 | 生成 .war 文件 | 生成 .war 文件 |


六、仓库配置对比

Maven 仓库
<!-- pom.xml - 仓库在 settings.xml 或 pom.xml 中配置 -->
<repositories><repository><id>central</id><url>https://repo.maven.apache.org/maven2</url></repository>
</repositories>
Gradle 仓库
// build.gradle(项目级)
allprojects {repositories {google()           // Google仓库(Android专用)mavenCentral()     // Maven中央仓库maven { url 'https://jitpack.io' }  // 自定义仓库}
}// settings.gradle(新版本)
dependencyResolutionManagement {repositories {google()mavenCentral()maven { url 'https://jitpack.io' }}
}

七、多模块项目对比

Maven 多模块
<!-- 父pom.xml -->
<modules><module>module1</module><module>module2</module>
</modules>
Gradle 多模块
// settings.gradle
rootProject.name = "MapNotifyApp"
include ':app'           // 主模块
include ':library'       // 库模块

八、性能对比

| 特性 | Maven | Gradle | |------|-------|--------| | 构建速度 | 较慢 | 更快(增量构建、缓存) | | 首次构建 | 慢 | 慢(需要下载依赖) | | 增量构建 | 支持但较慢 | 优秀(只编译变化部分) | | 并行构建 | 支持 | 支持且更高效 | | 守护进程 | ❌ | ✅(Gradle Daemon) |

Gradle 优势: - 增量构建:只编译变化的部分 - 构建缓存:复用之前的构建结果 - 守护进程:常驻内存,加快启动


九、灵活性对比

Maven:约定优于配置
<!-- Maven 有固定的目录结构 -->
src/main/java/        # 源代码resources/   # 资源文件test/java/        # 测试代码
Gradle:高度可定制
// Gradle 可以自定义目录结构
sourceSets {main {java {srcDirs = ['src/main/java', 'src/custom/java']}resources {srcDirs = ['src/main/resources', 'src/custom/resources']}}
}// 可以写自定义逻辑
android {applicationVariants.all { variant ->variant.outputs.all {outputFileName = "app-${variant.name}-${variant.versionName}.apk"}}
}

十、实际项目中的使用场景

您的项目结构
map-notify/
├── pom.xml                    # Maven配置(后端)
├── src/                       # Java源代码
└── android-app/├── build.gradle           # Gradle配置(项目级)├── settings.gradle        # Gradle设置└── app/└── build.gradle       # Gradle配置(模块级)

为什么这样设计?

  1. 后端服务(Spring Boot)

    • 使用 Maven:Java 生态常用,Spring Boot 官方支持
    • 打包:生成可执行 JAR
    • 命令:mvn clean package
  2. Android 应用

    • 使用 Gradle:Android 官方标准
    • 打包:生成 APK
    • 命令:./gradlew assembleDebug

十一、学习建议

如果您熟悉 Maven,学习 Gradle 的对应关系:

| Maven概念 | Gradle对应 | |-----------|-----------| | pom.xml | build.gradle | | <dependencies> | dependencies {} | | <plugin> | plugins {} 或 apply plugin: | | mvn clean | ./gradlew clean | | mvn package | ./gradlew build | | <scope>test</scope> | testImplementation |


总结

| 维度 | Maven | Gradle | |------|-------|--------| | 配置文件 | XML(冗长) | Groovy/Kotlin(简洁) | | 学习曲线 | 简单(约定明确) | 中等(更灵活) | | 性能 | 较慢 | 更快 | | 灵活性 | 较低 | 很高 | | Android支持 | ❌ | ✅ 官方支持 | | Java项目 | ✅ 广泛使用 | ✅ 广泛使用 |

对于您的项目: - 后端继续用 Maven(Spring Boot 生态) - Android 用 Gradle(官方标准)

两者可以共存,互不干扰。需要我进一步解释某个具体配置吗?

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

相关文章:

  • [Column#187] 10data_struct | IP速查表 | 协议TCPUDP | DeepSeek-OCR
  • 生产级HMACSHA256签名与验签案例
  • 腾讯云服务器搭建网站漯河网站建设费用
  • docker部署开源监控软件hertzbeat
  • 上海网站网站建设工程公司简介范文大全
  • STM32CubeMx学习hal库
  • 在线确定性算法与自适应启发式在虚拟机动态整合中的竞争分析与性能优化
  • 企业网站建设费多少钱硬盘做免费嗳暧视频网站
  • 做图在哪个网站上找南京自助建站模板
  • 山东市网站建设中国林业网站群建设工程
  • 大白话浅析Windows 安全核心机制
  • 【OpenCV + VS】OpenCV 随机数绘图:如何在图像中绘制随机线条
  • 个人网站可以做商城吗泰安人才信息网官网
  • 网站开发提供图片加载速度建设工程施工合同示范文本2021
  • sward实战教程系列(2) - 创建第一个知识库
  • iOS 内存管理之 autoreleasePool
  • 北京沙河教做网站的山东省济南市莱芜区
  • 长沙建长沙建网站公司给wordpress程序提速
  • 多国语言编译库 | 适用于全球化开发的高效工具
  • C语言编译系统 | 如何高效构建和使用C语言编译系统
  • 手机建设银行网站首页网站开发app开发主营业务
  • 11月12日星期三今日早报简报微语报早读
  • 360水滴摄像头重新设置摄像头wifi
  • Notepad++ 编译 C 语言的使用方法与技巧
  • 编译C语言的软件 | 轻松高效的C语言编译工具介绍
  • 企业网站设计特点建设银行网站怎么打印明细
  • C语言练习题——判断水仙花数(0-100000)
  • 广州好的网站建设昆明微网站搭建哪家好
  • 找国内外贸公司的网站深圳自己做网站
  • 视频融合平台EasyCVR:云台控制与语音对讲赋能远程交互式视频监控新场景