《Maven实战》
《Maven实战》阅读总结(一)
本文是对《Maven实战》一书,阅读笔记的总结。
Maven简介
Maven 主要用于 Java 项目构建、依赖管理和项目信息管理。能够帮助我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。Maven 减轻了 构建的重复,抽象了构建生命周期,并且为绝大部分的构建任务提供了已实现的插件。
简单的来说,Maven 是一个 构建工具、依赖管理工具、项目信息管理工具。
构建:编译、运行单元测试、生成文档、打包和部署。
扩展——同类软件
- Make:很难跨平台构建。
- Ant(Another Neat Tool):跨平台,使用xml定义构建脚本。
- Grable
核心概念
- pom(Project Object Model):项目对象模型。
- modelVersion:模型版本(Maven2/3 只能是 4.0.0)
- groupId:项目,那个组,通常为域名倒序,例如 yujian95.cn -> cn.yujian95
- artifactId:模块,组内唯一ID
- version:版本号,SNAPSHOT(快照,即不稳定版本)
- name:项目名
- package:打包方式,可选:pom、war、jar(默认)
1 |
|
- dependencies:依赖列表
- dependency:依赖包
- groupId、artifactId、version:基本坐标,同上
- type:依赖类型,同
package
,jar(默认,可不填) - exclusions:排除传递性依赖(排除依赖)
- optional:是否可选;可选依赖,只对当前项目有效,不会该依赖不会被传递
- scope:依赖范围,compile、test、provided、runtime、system、import(详情如下)
依赖范围 | 对于编译有效 | 对测试有效 | 对运行时有效 | 例子 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | spring-core |
test | — | Y | — | JUnit |
provide | Y | Y | — | servlet-api |
runtime | — | Y | Y | JDBC |
system | Y | Y | — | 本地的类库文件 |
1 | <dependencies> |
Maven 属性
- properties,统一管理依赖版本。(归类依赖)
1 | <properties> |
传递性依赖
- 路径最近者优先。(依赖传递层数越少的优先)
- 第一声明优先。(依赖传递层数相同时,声明顺序越前的优先)
优化依赖
Maven 会自动解析所有项目的直接依赖和传递性依赖,并且根据规则正确判断每个依赖的范围,对于一些依赖冲突,也能进行调节,以确保任何一个构件只有唯一的版本在依赖中存在。在这些工作之后,最后得到了的那些依赖被称为已解析依赖。mvn dependency:list
查看,mvn dependency:analyze
依赖分析(查看声明未使用依赖/使用未声明依赖)
- 显式声明任何项目中直接用到的依赖。
仓库
仓库,即存放构件的地方。减少磁盘浪费、便以统一管理。大致分成俩类,远程仓库和本地仓库,还有一种特殊的远程仓库(私服,减少宽带、下载时间、存放内部构件)。
构件,在Maven中,任何一个依赖、插件或者项目构建的输出,都可称做构件。
遵循坐标机制,Maven将可以容易的找到对应的构件。
例如:log4j:log4j:1.2.15
->log4j/log4j/1.2.15/log4j-1.2.15.jar
。
当Maven使用构件的时候,会先在本地仓库查找是否存在该构件,有则直接使用;如果不存在的话,会从远程仓库下载构件,或者查看新版本。如果都没有的话,Maven就会报错。
setting.xml
在本地仓库conf
目录下,我们可以通过配置setting.xml
修改本地仓库位置,还可以配置认证信息访问私服。
此外,因为国内访问中央仓库比较慢,一般来说,会通过配置国内镜像仓库,提高访问速度。
<mirrorOf>*</mirrorOf>
:匹配所有远程仓库。<mirrorOf>external:*</mirrorOf>
:匹配所有远程仓库,除 localhost之外。<mirrorOf>repo1,repo2</mirrorOf>
:匹配repo1
、repo2
仓库。<mirrorOf>*,! repo1</mirrorOf>
:匹配所有远程仓库,除repo1
外仓库。
1 | <mirror> |
部署构件至远程仓库
我们可以在pom.xml
通过distributionManagement
将构件部署到远程仓库,运行 mvn clean deploy
1 | <distributionManagement> |
- LATEST:最新版本
- RELEASE:最新发布版本
常用命令
clean:清除原有构件。
install:将项目的构建输出文件安装到本地仓库。
deploy:部署构件。
1 | mvn clean install |
生命周期
依赖加载规则
继承和聚合
需要注意的点
引用
微信扫一扫,阅读/分享
本文发表于 2020-10-21,最后修改于 2020-11-17。
本站永久域名「 yujian95.cn 」,也可搜索「 遇见1995 」找到我。
期待关注我的微信公众号「 编程图解 」 ,查看最近的文章和动态。