1. 概述
Maven 和 Gradle 是两大主流构建自动化和依赖管理工具,它们极大地简化了开发工作。虽然 Maven 应用广泛,但 Gradle 作为更现代的方案,灵活性更强。
对于从 Maven 迁移到 Gradle 的开发者来说,掌握命令的对应关系至关重要。
本文将对比常见 Maven 命令及其在 Gradle 中的等价实现,并探讨如何将项目构件发布到 Maven 本地仓库,供其他项目使用。
2. Maven 命令与 Gradle 对比
下面我们列出高频 Maven 命令及其 Gradle 等价命令。
2.1. 更新依赖
两者都支持更新项目依赖,确保使用最新版本。
在 Maven 中,强制更新依赖的典型命令是:
mvn clean install -U
-U
参数会强制 Maven 检查远程仓库的依赖更新(即使本地已存在)。
⚠️ 但该命令不会更新正式版(非 SNAPSHOT)依赖。要更新正式版,需手动修改 pom.xml
或使用:
mvn versions:use-latest-releases
此命令会将所有非 SNAPSHOT 依赖升级到最新正式版。
在 Gradle 中,强制刷新依赖的命令是:
gradle build --refresh-dependencies
该命令会忽略本地缓存,强制从远程仓库重新查找依赖。关键点:Gradle 只对动态版本(如 SNAPSHOT
、latest.release
、1.+
)检查更新,并智能比对文件哈希值——匹配时直接复用本地文件,避免重复下载。
2.2. 构建与安装项目
Maven 中执行清理、编译、测试、打包和安装的命令:
mvn clean install
Gradle 中实现相同操作的命令:
gradle clean build
此命令会删除 build/
目录,然后执行编译、测试和打包。
2.3. 其他常用命令
Maven 命令 | Gradle 命令 | 作用 |
---|---|---|
mvn clean |
gradle clean |
删除构建目录 |
mvn compile |
gradle compileJava |
编译 Java 代码 |
mvn test |
gradle test |
运行测试 |
mvn package |
gradle jar / gradle war |
创建 JAR/WAR 文件 |
mvn verify |
gradle check |
执行所有校验任务 |
mvn deploy |
gradle publish |
发布构件到远程仓库 |
mvn site |
无直接等价命令 | Maven 生成项目站点(Gradle 无内置功能) |
mvn dependency:tree |
gradle dependencies |
显示项目依赖树 |
mvn dependency:purge-local-repository |
gradle --refresh-dependencies |
强制重新下载依赖 |
3. 多项目协作场景
当处理相互依赖的多项目时,需将某项目的构件发布到本地仓库供其他项目使用。
在 Maven 中,通过 mvn install
实现本地发布。Gradle 的实现方式如下:
Gradle 7 之前版本:在 build.gradle
中应用 maven
插件:
apply plugin: "java"
apply plugin: "maven"
group = 'com.example'
version = '1.0.0'
然后执行:
gradle install
**此命令将构件安装到 ~/.m2/repository
**,使依赖项目可用。
Gradle 7 及更高版本:使用 maven-publish
插件:
plugins {
id 'java'
id 'maven-publish'
}
group = 'com.example'
version = '1.0.0'
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
mavenLocal()
}
}
✅ 关键配置解析:
java
插件:处理标准 Java 编译和打包maven-publish
插件:负责发布构件到仓库group
和version
:定义项目坐标publishing
块:mavenJava
发布项:通过from components.java
将 JAR 文件及元数据包含在发布内容中mavenLocal()
:指定发布到 Maven 本地仓库
配置完成后,执行 gradle publish
即可将构件发布到本地仓库,其他项目可直接引用。
4. 总结
本文对比了 Maven 与 Gradle 的核心命令。可以看出,两者功能高度相似,但配置方式和命令语法存在差异。
迁移建议:通过对比理解命令对应关系,能显著降低学习成本。虽然 Gradle 的配置更灵活,但初期可能需要踩坑适应——比如动态依赖的处理机制就比 Maven 更智能。掌握这些等价命令后,迁移过程会顺畅很多。