常用构建工具(Maven / Gradle 入门)
概述
构建工具(Build Tool)负责编译、测试、打包、发布等重复性工作,并统一管理依赖(第三方库)。手写 javac 和 classpath 在小型练习中尚可,一旦项目变大、依赖增多,就需要 Maven 或 Gradle 这类工具。两者都支持约定优于配置:约定好目录结构后,一条命令即可完成构建。
- Maven:基于 XML 配置(
pom.xml),生态成熟、资料多,企业中使用广泛。 - Gradle:基于 Groovy/Kotlin DSL 的构建脚本,配置更灵活、增量构建快,Android 与很多新项目选用。
本文从安装、项目结构、依赖管理和常用命令四方面做入门介绍,便于你快速在本地跑起一个 Maven 或 Gradle 项目。
适用场景
入门阶段任选其一即可;实际项目以团队或公司使用的工具为准。建议先掌握 Maven 再接触 Gradle,概念相通。
为什么需要构建工具
在不使用构建工具时,你通常需要:
- 手动下载 JAR 并配置 classpath;
- 自己组织
src、out等目录; - 写脚本或多次执行
javac、java完成编译和运行。
构建工具带来的好处:
- 依赖管理:在配置中声明依赖(如 JUnit、Spring),工具自动下载并加入 classpath。
- 统一目录结构:如 Maven 的
src/main/java、src/test/java,团队与 CI 一致。 - 标准化生命周期:编译、测试、打包、安装等通过一条命令完成。
- 可重复构建:同一份配置在任何机器上得到相同结果,便于协作与发布。
Maven 入门
安装 Maven
- 从 Maven 官网 下载 Binary 压缩包,解压到本地目录(如
C:\Program Files\Apache\maven或/opt/maven)。 - 配置环境变量:
- M2_HOME(或 MAVEN_HOME):指向 Maven 解压目录。
- PATH:增加
%M2_HOME%\bin(Windows)或$MAVEN_HOME/bin(Linux/macOS)。
- 验证:终端执行
mvn -v,应输出 Maven 与 JDK 版本信息。
mvn -v
# Apache Maven 3.9.x
# Maven home: ...
# Java version: 17.x.xMaven 项目结构(约定)
Maven 使用约定目录结构,无需在配置里逐个指定源码路径:
my-app/
pom.xml # 项目配置与依赖(核心文件)
src/
main/
java/ # 主代码
com/example/App.java
resources/ # 主资源(配置文件等)
test/
java/ # 测试代码
com/example/AppTest.java
resources/ # 测试资源
target/ # 编译输出(可忽略,不提交版本库)pom.xml 基本结构
pom.xml(Project Object Model)定义项目坐标、依赖和构建配置。以下是一个最小可用的示例:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 项目坐标:groupId + artifactId + version 唯一标识一个项目/依赖 -->
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-app</name>
<description>Maven 入门示例项目</description>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 示例:JUnit 5 用于单元测试 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>- groupId / artifactId / version:组成坐标,依赖也通过这三者声明。
- properties:统一 JDK 版本与编码,便于维护。
- dependencies:声明依赖;
scope为test表示仅测试时使用。
Maven 常用命令
在项目根目录(含 pom.xml 的目录)下执行:
| 命令 | 说明 |
|---|---|
mvn compile | 编译主代码到 target/classes |
mvn test | 编译并运行测试 |
mvn package | 编译、测试并打包(默认 JAR 到 target/) |
mvn clean | 删除 target/ 目录 |
mvn clean package | 先清理再打包,常用 before 发布 |
mvn dependency:tree | 查看依赖树,排查冲突 |
# 典型开发流程:清理 → 编译 → 测试 → 打包
mvn clean package提示
首次运行 Maven 会从中央仓库下载依赖与插件,可能较慢;可配置国内镜像(如阿里云)加速,见 Maven 配置镜像。
Gradle 入门
安装 Gradle
- 从 Gradle 官网 下载二进制包并解压,或将
bin目录加入 PATH。 - 也可通过 SDKMAN 或 Homebrew(macOS)安装:
brew install gradle。 - 验证:
gradle -v或gradlew -v(使用项目自带 Wrapper 时)。
很多项目不要求本机安装 Gradle,而是使用项目内的 Gradle Wrapper(gradlew / gradlew.bat),能保证所有人使用同一 Gradle 版本。
Gradle 项目结构(约定)
与 Maven 类似,Gradle 也约定默认目录:
my-app/
build.gradle # 构建脚本(常用)
settings.gradle # 项目/模块名
gradlew / gradlew.bat # Wrapper 脚本(Unix / Windows)
gradle/
wrapper/
gradle-wrapper.properties
src/
main/
java/
resources/
test/
java/
resources/
build/ # 编译输出(可忽略)build.gradle 基本结构
以下为基于 Groovy DSL 的最小示例,等价于上面 Maven 的 pom.xml:
plugins {
id 'java'
}
group = 'com.example'
version = '1.0-SNAPSHOT'
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral() // 从 Maven 中央仓库拉取依赖
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'
}- plugins:
java插件提供compileJava、test、jar等任务。 - repositories:依赖来源,通常用
mavenCentral()。 - dependencies:声明方式为
'groupId:artifactId:version';testImplementation表示仅测试时使用。
Gradle 常用任务
在项目根目录执行(使用 Wrapper 时用 ./gradlew 或 gradlew.bat):
| 任务 | 说明 |
|---|---|
gradle classes | 编译主代码 |
gradle test | 运行测试 |
gradle build | 编译、测试、打包 |
gradle clean | 删除 build/ 目录 |
gradle clean build | 先清理再完整构建 |
gradle dependencies | 查看依赖树 |
# 使用 Wrapper(推荐)
./gradlew clean build版本说明
若使用 Kotlin DSL,构建脚本为 build.gradle.kts,语法为 Kotlin;概念与 Groovy 版一致,仅写法不同。
使用示例
示例 1:用 Maven 创建一个可运行 JAR
在 pom.xml 中指定主类并配置打包插件,即可生成「可执行」JAR:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>打包后运行:
mvn clean package
java -jar target/my-app-1.0-SNAPSHOT.jar示例 2:用 Gradle 声明多个依赖
在 build.gradle 的 dependencies 中增加主代码与测试依赖:
dependencies {
implementation 'com.google.guava:guava:32.1.1-jre' // 主代码使用
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'
}- implementation:仅对当前模块暴露,依赖不会传递到上层,推荐日常使用。
- api:依赖会传递给使用本模块的模块,适合库项目暴露接口依赖。
执行 ./gradlew build 时,Gradle 会下载上述依赖并参与编译与测试。
示例 3:Maven 添加国内镜像(加速)
在用户目录下的 .m2/settings.xml(若不存在可新建)中配置阿里云镜像:
<settings>
<mirrors>
<mirror>
<id>aliyun-central</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
</mirrors>
</settings>之后依赖下载会走阿里云,速度通常更快。
Maven 与 Gradle 简要对比
| 方面 | Maven | Gradle |
|---|---|---|
| 配置格式 | XML(pom.xml) | Groovy/Kotlin DSL(build.gradle) |
| 学习资料 | 多,企业常见 | 逐渐增多,新项目常见 |
| 构建速度 | 相对较慢 | 增量构建快 |
| 灵活性 | 约定固定,扩展靠插件 | 脚本化,自定义任务方便 |
| 适用 | 传统企业、Spring 等 | Android、新项目、多模块 |
提示
不必纠结「先学哪个」:掌握一个后,另一个的概念(坐标、依赖、生命周期/任务)基本一致,切换成本不高。
注意事项
依赖范围(scope)
Maven 的 scope(如 compile、test、provided)和 Gradle 的 implementation、testImplementation 等会影响依赖是否参与编译、测试或打包。误用可能导致运行时找不到类或 JAR 体积过大;新增依赖时注意选择合适范围。
版本冲突
多级依赖可能引入同一库的不同版本。Maven 使用「最近定义」等规则;Gradle 可查看 dependency:tree / dependencies 排查,并在配置中通过 exclude 或强制版本来统一。
不要提交 target / build
target/(Maven)和 build/(Gradle)为构建产物,应加入 .gitignore,不要提交到版本库。
相关链接
- 编码规范 — 项目中的命名与格式约定
- 单元测试入门(JUnit) — 在 Maven/Gradle 中运行测试
- Maven 官方入门指南
- Gradle 用户手册
- Oracle Java 文档