注:约定大于配置
基于项目对象模型(POM)的概念纯java开发的开源项目管理工具,对java项目进行项目构建和依赖管理
????????????????编译、测试、运行、打包、安装、部署
????????????????传统的web项目,需把所有用到的jar包放到工程里,导致工程很大;maven项目不直接将jar包导入工程,使用pom.xml文件定位jar包坐标,工程去指定存放jar包的仓库(maven仓库),根据坐标找到使用。
? ? ? ? 1) 存放依赖(jar包)的地方,并且管理着每个依赖唯一的标识(坐标),Java项目凭坐标获取依赖。
? ? ? ? 2) 分类
? ? ? ? ? ? ? ? a. 本地仓库
????????????????????????存储从远程仓库或中央仓库下载的插件和jar包,项目使用优先从本地仓库查找。
? ? ? ? ? ? ? ? b. 远程仓库
????????????????????????本地仓库中没有,默认去远程仓库下载--可以是互联网也可以是局域网(私服)。
? ? ? ? ? ? ? ? c. 中央仓库--https://mvnrepository.com/
????????????????????????maven团队维护,软件中内置的远程仓库,服务于整个互联网。
? ? ? ? 3) 公共仓库
? ? ? ? ? ? ? ? a. 除中央仓库外的其他远程仓库,比如阿里云仓库...(中央仓库在国外,下载速度太慢,在国内配置一个远程仓库代替)。
????????????????
????????????????
????????????????
????????????????project 文件的根节点
????????????????modelVersion 模型版本
????????????????groupId 项目标识
????????????????artifactId 项目名称
????????????????version 项目版本
????????????????packaging 打包类型,jar、war、pom等
????????????????name 项目的显示名
????????????????description 项目描述
????????????????dependencies 项目依赖的坐标
????????????????properties 属性管理
????????jar包的使用时间段即生命周期,在pom文件中导入依赖(根据GAV定位)时指定(scope便签),默认为compile依赖范围。
????????????????compile:编译范围,用在编译、测试、运行范围,运行时需要会被打包。
????????????????provided:提供依赖,用在编译、测试范围,运行时不需要不会被打包。
????????????????runtime:运行范围,编译不需要,用在测试、运行范围,运行时需要会被打包。
????????????????test:编译、运行时不需要不会被打包。
????????compile:编译,将src/main/java下的文件编译成class文件输出到target目录下。
????????clean:清理,将target目录及内容都删除。
????????package:打包,把工程打成jar包或war包。
????????install:安装,打成的jar包或war包发布到本地仓库。
????????????????架设在局域网的特殊的远程仓库;项目请求私服,私服上有直接下载到本地仓库,否则,私服请求外部的远程仓库下载到私服,供本地仓库使用。
????????????????
????????????????
? ? ? ? ? ?????????
? ? ? ? 1) 继承和聚合
????????????????继承是为了消除重复,如果将dao、service、web创建多个工程,则pom文件中内容重复;比如:编译版本,spring版本等;可以将这些重复的配置提取出来在父工程pom文件中配置。
????????????????聚合是为了多个模块同时运行,dao、service、web放在一块运行。
? ? ? ? 2) 解决依赖冲突
????????????????第一声明优先原则:pom文件中,先声明的依赖为准。
????????????????路径近者优先原则:直接依赖级别高于传递依赖。
????????????????排除依赖
????????????????????????