认识Maven和本地仓库

🔧 什么是 Maven?

Maven 是一个 Java 项目的构建工具,主要用于:

  • 项目构建(比如编译、打包)
  • 依赖管理(比如自动下载第三方 Jar 包)
  • 项目管理(比如版本控制、模块化、多环境配置)

Maven 的核心是 POM(Project Object Model) 文件,也就是 pom.xml,它是你项目的说明书,告诉 Maven 怎么处理你的项目。


🧱 Maven 做了什么?

Maven 主要做三件事:

  1. 管理依赖

    • 自动下载你项目所需的 jar 包
    • 支持依赖传递(即 A 依赖 B,B 依赖 C,那 A 会自动获取 C)
  2. 标准化构建流程

    • 提供一套 生命周期 和插件机制,统一构建(比如编译、测试、打包)
  3. 模块化项目管理

    • 支持多模块项目(父子模块结构)

🏗️ Maven 项目结构(默认)

project
├── pom.xml               // Maven核心配置文件
└── src
    ├── main
    │   ├── java          // 主代码
    │   └── resources     // 配置文件等资源
    └── test
        ├── java          // 测试代码
        └── resources     // 测试资源

📦 什么是 POM?

POM(Project Object Model)是 Maven 的配置文件 pom.xml,定义了:

  • 项目名称、版本等元信息
  • 依赖列表(dependencies)
  • 插件和构建流程(plugins)
  • 打包方式(如 jar、war)
  • 模块(modules)等

示例:最小 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>myapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.7.3</version>
    </dependency>
  </dependencies>
</project>

🔁 构建生命周期(Lifecycle)

Maven 有三套主要生命周期,最常用的是 默认生命周期(default lifecycle)

常见阶段如下:

阶段功能
validate验证项目结构是否正确
compile编译源代码
test编译并运行测试代码
package打包(如 jar、war)
install安装到本地仓库
deploy发布到远程仓库

执行命令:

mvn clean package  # 清除旧编译产物后打包

🧩 Maven 仓库

Maven 下载依赖包的地方叫做 仓库(Repository),有三种类型:

  1. 本地仓库(Local Repository)
    默认在 ~/.m2/repository,你项目依赖的包会缓存到这里

  2. 中央仓库(Central Repository)
    Maven 官方维护的大型仓库

  3. 私服仓库(Remote Repository)
    公司内部搭建的,比如 Nexus、Artifactory


📁 settings.xml

配置 Maven 全局行为,比如:

  • 本地仓库位置
  • 私服地址
  • 代理设置

位置:~/.m2/settings.xml


🧰 常用 Maven 命令

mvn clean         # 清除 target 目录
mvn compile       # 编译
mvn test          # 执行测试
mvn package       # 打包
mvn install       # 安装到本地仓库
mvn dependency:tree  # 查看依赖树

🧱 多模块项目(父子工程)

Maven 支持大型项目拆分为多个子模块,通过父 POM 管理。

父 pom.xml 示例:

<modules>
  <module>module-a</module>
  <module>module-b</module>
</modules>

📌 Maven 和 Gradle 的区别(简略)

项目MavenGradle
语法XML(固定格式)Groovy/Kotlin(灵活)
学习曲线简单略陡
性能慢(早期)快(增量构建)
可读性清晰但啰嗦简洁但灵活性过高

✅ 总结一句话

Maven 是一个约定优于配置的 Java 项目构建管理工具,核心是通过 POM 文件实现依赖管理和构建自动化。



关于➡️本地仓库⬅️的常见问题

❓ 第一次运行 pom.xml,会下载依赖吗?

是的!当你第一次运行 Maven 命令(如 mvn compilemvn package 等)时,Maven 会读取 pom.xml,解析出依赖项,然后:

  1. 先查你本地仓库(默认在 ~/.m2/repository)有没有对应依赖;
  2. 如果没有,就从 中央仓库 下载依赖;
  3. 下载完的依赖会缓存在本地仓库中,下次不再下载

❓ 什么操作会导致依赖“下载到仓库里”?

只要你执行任何会解析依赖的命令(如以下这些),依赖就会被下载到本地仓库:

mvn compile
mvn test
mvn package
mvn dependency:resolve

❓ 当我更新 pom.xml(比如加了个依赖),依赖仓库会改变吗?

会下载新依赖,但旧的不会删除或改变。

解释:

  • Maven 会检测新增的依赖;
  • 如果新依赖本地没有,就会下载并放入本地仓库;
  • 已存在的依赖不会被修改或重新下载(除非你强制刷新,见下一条)。

❓ 如果我修改了已有依赖的版本呢?

比如你将:

<version>1.0</version>

改成:

<version>1.1</version>

此时 Maven 会认为这是全新的依赖,并从仓库下载该版本,缓存到本地。

旧版本仍保留在本地仓库中(不会自动删除)!!!


❌ 如果我什么都没改,依赖仓库会自动更新吗?

不会自动变更!

  • Maven 默认不会重新下载依赖,即使远程仓库上该依赖已更新(除非你加 SNAPSHOT 依赖)。
  • SNAPSHOT 版本除外(见下一条)。

🔁 SNAPSHOT 依赖是例外!

如果你依赖的是:

<version>1.0-SNAPSHOT</version>

那么 Maven 会默认每次运行检查远程仓库是否有新版本,可能会重新下载。

你也可以配置 SNAPSHOT 的刷新频率(如每天、每次等)。


🧹 什么时候依赖会被更新或重下?

操作会更新依赖吗?
修改 pom 增加新依赖✅ 是
修改依赖版本✅ 是
使用 SNAPSHOT 依赖✅ 是(条件)
执行 mvn dependency:purge-local-repository✅ 会强制清除并重新下载
手动删掉 .m2/repository 某依赖✅ 会重新下载
什么都不做再运行❌ 不会

✅ 总结一句话:

Maven 只在你添加/修改依赖或首次构建时,才会从远程仓库下载依赖并保存到本地仓库。之后不会自动变动,除非你用的是 SNAPSHOT 或手动清理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值