上一站知道了包管理器是什么。现在深入 Maven。
pom.xml —— 项目清单
一个最简的 pom.xml:
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
</dependencies>
</project>三件套:groupId(组织)、artifactId(项目名)、version(版本号)。合起来就是全球唯一标识。
存成
pom.xml,mvn compile自动下载依赖并编译。
生命周期
Maven 定义了一串阶段,你只用记最常用的几个:
bash
mvn clean # 清理
mvn compile # 编译
mvn test # 测试
mvn package # 打包
mvn install # 装到本地
mvn clean package # 最常用锁文件
一个经典悲剧:同事 A 用 "lodash": "^4.17.21",三个月后你 npm install 拿到 4.17.30——但 4.17.28 引入了 bug。
锁文件记录了你实际安装的每个依赖的精确版本和依赖树。
| 生态 | 锁文件 | 精确安装 |
|---|---|---|
| npm | package-lock.json | npm ci |
| pip | requirements.txt | pip install -r |
| Maven | 无内置 | 写死版本号 |
两个文件都该提交 Git。 package.json 是声明,package-lock.json 是快照。
.gitignore
生成物不该提交:
gitignore
# Python
__pycache__/
*.pyc
.venv/
# Node
node_modules/
# Java
target/
*.class
# IDE
.idea/
.vscode/黄金法则:能通过
npm install/pip install/mvn compile重新生成的,都不提交。
bash
cat > .gitignore << 'EOF'
target/
node_modules/
__pycache__/
.idea/
.vscode/
EOF总结
| 概念 | 一句话 |
|---|---|
| pom.xml | Maven 的项目清单 |
| 生命周期 | clean → compile → test → package → install |
| 锁文件 | 精确记录安装版本 |
| .gitignore | 生成物不提交 |
→ 下一章
依赖装上了,但版本号里的 ^2.15.2 是什么意思?下一站:语义化版本。