Maven_九大核心概念
一、POM
Maven 核心概念:POM
① 含义
POM:Project Object Model,项目对象模型。
和 POM 类似的是:
DOM:Document Object Model,文档对象模型。
② 思想
POM 表示将工程抽象为一个模型,再用程序中的对象来描述这个模型。这样我们就可以用程序来管理项目了。我们在开发过程中,最基本的做法就是将现实生活中的事物抽象为模型,然后封装模型相关的数据作为一个对象,这样就可以在程序中计算相关的数据。
二、约定的目录结构
Maven 核心概念:约定的目录结构
① 各个目录的作用
另外还有一个 target 目录专门存放构建操作输出的结果。
② 约定目录结构的意义
Maven 为了让构建过程能够尽可能自动化完成,所以必须约定一个目录结构。例如:Maven 执行编译操作,必须先去 Java 源程序目录读取 Java 源代码,然后执行编译,最后把编译结果存放在 target 目录。
③ 约定大于配置
Maven 对于目录结构这个问题,没有采用配置的方式,而是基于约定。这样会让我们在开发过程中非常方便。
如果每次创建 Maven 工程后,还需要针对各个目录的位置进行详细的配置,那肯定非常麻烦。
目前开发领域的技术发展趋势就是:配置大于编码,约定大于配置。
三、坐标
1、坐标的作用
在 Maven 仓库中唯一定位到一个 jar 包
2、坐标中的三个向量
向量名称 | 向量作用 | 向量命名规范 |
---|---|---|
groupId | 定位到公司开发的项目 | 域名倒序.项目名 |
artifactId | 定位到项目中的模块 | 模块名 |
version | 指定模块版本 | 无 |
3、坐标对应的 jar 包路径
坐标:
1 | <groupId>javax.servlet</groupId> |
上面坐标对应的 jar 包在 Maven 本地仓库中的位置:
1 | Maven本地仓库根目录\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar |
四、生命周期
1、作用
为了让构建过程自动化完成,Maven 设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作。
2、三个生命周期
生命周期名称 | 作用 | 各个环节 |
---|---|---|
Clean 生命周期 | 清理操作相关 | pre-clean clean post-clean |
Site 生命周期 | 生成站点相关 | pre-site site post-site deploy-site |
Default 生命周期 | 主要构建过程 | validate generate-sources process-sources generate-resources process-resources 复制并处理资源文件,至目标目录,准备打包。 compile 编译项目的源代码。 process-classes generate-test-sources process-test-sources generate-test-resources process-test-resources 复制并处理资源文件,至目标测试目录。 test-compile 编译测试源代码。 process-test-classes test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。 prepare-package package 接受编译好的代码,打包成可发布的格式,如 JAR。 pre-integration-test integration-test post-integration-test verify install 将包安装至本地仓库,以让其它项目依赖。 deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。 |
3、特点
- 前面三个生命周期彼此是独立的。
- 在任何一个生命周期内部,执行任何一个具体环节的操作,都是从本周期最初的位置开始执行,直到指定的地方。(本节记住这句话就行了,其他的都不需要记)
Maven 之所以这么设计其实就是为了提高构建过程的自动化程度:让使用者只关心最终要干的即可,过程中的各个环节是自动执行的。
五、插件和目标
1、插件
Maven 的核心程序仅仅负责宏观调度,不做具体工作。具体工作都是由 Maven 插件完成的。例如:编译就是由 maven-compiler-plugin-3.1.jar 插件来执行的。
2、目标
一个插件可以对应多个目标,而每一个目标都和生命周期中的某一个环节对应。
Default 生命周期中有 compile 和 test-compile 两个和编译相关的环节,这两个环节对应 compile 和 test-compile 两个目标,而这两个目标都是由 maven-compiler-plugin-3.1.jar 插件来执行的。
六、依赖
1、依赖的基本配置方式
2、依赖的范围
3、依赖的传递性
4、依赖的排除
七、继承
1、在父工程中配置对依赖的管理
2、在子工程引用父工程中管理的依赖
八、聚合
聚合的配置
九、仓库
1、仓库分类
- 本地仓库:在当前电脑上,为电脑上所有工程服务
- 远程仓库:需要联网
2、扩展
关于框架之间的依赖信息版本问题:
举例:SpringMVC 用到 jackson 的 jar 包,需要我们自己选择正确的版本。
例如:SpringMVC 的 4.3.20 经过测试确认,需要匹配 jackson 的 2.9.8 版本。
使用 Maven 开发时,个别情况需要解决类似问题。这方面有赖于经验的沉淀和传承(如果有人告诉你现成的答案,就不需要自己摸索了,反之需要自己反复查资料、调试)。
在公司内实际开发时,恰当的依赖信息的组合往往会通过父工程中 dependencyManagement 沉淀下来,形成经验的积累。