依赖管理
在之前的传统 WEB 项目中,所依赖的 JAR 包都要复制到工程中,这就导致了工程比较大。
Maven 的解决方案:
上图是一个普通的 Maven 工程目录,这其中,,蓝色的 java 文件夹用于存放项目源代码, resources 用于存放项目资源,绿色的 java 用于存放单元测试代码,target 文件比较重要,这是我们今天的主题,他是项目的输出位置,Maven 编译后的 class/打包文件 会输出到此目录。
在 Maven 工程中,是不直接把 JAR 包直接导入到工程中的,其通过在 pom.xml 文件中添加所需的 JAR 包坐标来解决问题。在需要用到 JAR 包的时候,通过 pom.xml 文件中的坐标到一个专门用于存放 JAR 包的仓库也就是 Maven 仓库中根据坐标从而找到这些 JAR 包拿来运行。这其中会涉及到一个问题—性能,不过不用担心, Maven 中通过建立索引,就解决了这问题,这使得我们在加载 JAR 包时和从工程中加载的速度是一样的。加载过程如下图:
工程构建
右图对应了 Maven 中常用的几个命令
这也是构建机制的核心概念——生命周期(lifecycle)
这大概可以分为三种:default、clean、site
default:主要处理项目的部署
clean:主要处理项目构建后的清理工作
site:主要处理项目的站点文档生成
default 生命周期包含了右图的这些阶段
- compile 命令:下载所有当前项目所需要的插件,以及所有依赖的项目,然后进行构建
- package 命令:从 pom 文件中获取打包类型,然后将打出来的 JAR 输出到对应目录
- install 命令:将打包完放在 target 目录下的 JAR 包部署到本地仓库
POM
pom.xm元素解析
project
这个元素是Maven的pom.xml文件的顶层元素。每个POM文件都是以一个project
元素包裹的。modelVersion
这个元素指定了当前这个pom.xml文件使用的项目对象模型(POM)的版本。groupId
这个元素表示创建这个项目的组织的唯一标识。这个元素的值是区分一个项目的关键信息之一,它的值通常是由该项目的组织的域名的反写产生的(和Java的包名的机制一样)。artifactId
这个元素是唯一标识了该项目最终生成的artifact(可以理解为是我们编写代码产生的一个程序,所以可以理解为是手工作品)。一个项目的artifact一般是一个jar
文件。一个项目最终生成的artifact的名字的格式是<artifactId>-<version>.<extension>
,比如上面的项目生成的artifact为myapp-1.0.jar
。packaging
这个元素指定了该artifact打包的类型(比如:jar、war、ear等)。这不只是意味着该artifact是以什么方式打包,也指定了在构建过程中会用到的特定的生命周期(所谓的生命周期,简单的说就是构建的过程)。packaging
元素的默认值是JAR
。version
这个元素指定了项目生成的artifact的版本号。在版本号中会包含当前项目的进度,比如这里的SNAPSHOT
。name
这个元素表示项目的名字,常用于生成的文档中。url
这个元素表示该项目所在的站点,常用于生成的文档中。description
这个元素提供了对项目的描述,通常用于生成的文档中。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!