摘要:本文学习了Maven相关的知识。
环境
Windows 10 企业版 LTSC 21H2
Java 1.8
Maven 3.6.0
1 简介
1.1 说明
Maven是Apache基金会旗下的纯Java开源项目管理工具,基于项目对象模型(Project Object Model,POM)概念,通过中央配置文件统一管理项目的构建、依赖、报告与文档等全生命周期流程。
1.2 核心
Maven的核心价值体现在两大维度:
- 构建自动化:替代手动执行编译、测试、打包等重复步骤,通过一条命令完成全流程构建。
- 依赖管理规范化:自动管理项目依赖的第三方Jar包,解决传统依赖管理的查找难、冲突多、嵌套复杂等问题。
2 项目构建
2.1 含义
构建并不是创建,创建一个项目并不等于构建一个项目,构建是将项目源码、资源文件等转化为可运行产物的完整流程。
拿Java语言开发来说,构建就是将Java源代码进行编译,将编译后的文件以及其他的资源文件封装成JAR包或WAR包,然后放到服务器上部署运行。
2.2 对比
传统构建过程的几个环节:
- 清理:删除以前的编译结果,为重新编译做好准备。
- 编译:将Java源程序编译为字节码文件。
- 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
- 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应JAR包,Web工程对应WAR包。
- 部署:将打包的结果部署到远程仓库或将WAR包部署到服务器上运行。
同传统的构建过程不同,Maven可以自动构建,只需要一条命令即可完成所有的构建过程。
3 依赖管理
3.1 含义
在Java项目里面,可能依赖了第三方的Jar包,依赖管理就是将项目所依赖的Jar包按照一定的规则进行规范化管理。
3.2 对比
传统的依赖管理就是简单的将所依赖的Jar包下载到本地,然后添加到项目里,这种方式有很多缺点:
- 查找困难:需手动在网上搜索Jar包,部分Jar包下载过程复杂麻烦。
- 版本冲突:不同依赖引用同一Jar包的不同版本会导致冲突,手动排查成本高。
- 嵌套依赖:一个Jar包可能依赖其他Jar包,使用一个Jar包需要同时下载其所依赖的Jar包。
- 项目臃肿:如果项目依赖的Jar包过多,会导致项目体积庞大,版本控制仓库负担过重。
Maven维护了一个中央仓库,只需要在项目中添加pom.xml文件,在文件中以坐标的方式定位Jar包,就可以自动的从中央仓库中根据坐标下载该Jar包,并且会同时下载其所依赖的其他Jar包。
4 目录结构
在开发中,第三方工具或框架如果需要识别项目资源,可以通过两种方式:
- 基于配置:通过配置手动告诉工具资源的位置。
- 基于约定:工具预设一套目录规则,开发者按规则存放文件,工具自动识别。
Maven遵循“约定优于配置”的理念,定义标准化目录结构,避免手动配置资源位置,确保工具能自动识别源码、资源、测试代码等。
Maven项目标准目录结构:
1 | 项目根目录 |
条