Gradle vs Maven 详细对比

一、基本概念

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


二、配置文件格式对比

Maven(XML 格式)

<!-- pom.xml - 您的后端项目 --> <project>     <groupId>com.mapnotify</groupId>     <artifactId>map-notify</artifactId>     <version>1.0.0</version>      <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>     </dependencies>      <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build> </project>

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

Gradle(Groovy DSL 格式)

// build.gradle - 您的Android项目
plugins {
    id 'com.android.application'
}

android {
    namespace 'com.mapnotify.app'
    compileSdk 33

    defaultConfig {
        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:version
    implementation 'androidx.appcompat:appcompat:1.6.1'

    // 极光推送SDK
    implementation 'cn.jiguang.sdk:jpush:5.1.6'
    implementation 'cn.jiguang.sdk:jcore:3.0.0'

    // 测试依赖用 testImplementation
    testImplementation '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 false
            proguardFiles 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)
  2. 使用 Maven:Java 生态常用,Spring Boot 官方支持
  3. 打包:生成可执行 JAR
  4. 命令:mvn clean package
  5. Android 应用
  6. 使用 Gradle:Android 官方标准
  7. 打包:生成 APK
  8. 命令:./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(官方标准)

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

Gradle vs Maven 详细对比

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...