Maven笔记
Mavne概念
- Apache Maven是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档,最强大的功能就是能够自动下载项目依赖
功能
- 主要服务于基于Java平台的项目构建,依赖管理和项目信息管理
- 跨平台:基于Java平台的项目构建
- 自动化:自动下载依赖
- 标准化:项目结构统一标准
- 可重用:POM可重用设计
核心概念
仓库
- 在Maven中,任何一个jar包,插件或者项目构建的输出,都可以称之为构件
- Maven在某个统一的位置存储所有项目的共享构件,这个统一的位置,我们就称之为仓库
- 仓库就是存放构件的位置
中央仓库
- 包含了绝大多数流行的开源Java构件,以及源码,作者信息,SCM (Software config Managment) 信息 许可信息等
- 开源的Java项目依赖的构件都可以在这里下载到
- 地址: http://repo.maven.apache.org/maven2
本地仓库
- 是maven在本机存储构件的地方
- maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才会被创建
- 默认位置:在操作系统用户的目录下.m2/repository/。仓库位置可以修改。
远程仓库
- 远程仓库是中央仓库的替代品(镜像)
- 主要作用是加快周边地区的访问速度
坐标
- 在maven中,任何一个构件都有一个唯一标识
- 这个标识 至少包含组织编码 <groupId> 项目编码 <artifactId> 版本信息 <version>
- 坐标就是构件在仓库中的定位
依赖管理
- 在pom.xml中的节点<dependency>为一个依赖(基本依赖信息包含组织编码 <groupId> 项目编码 <artifactId> 版本信息 <version>)
- 坐标是依赖的基本信息
-
1 <dependencies> 2 <!-- Spring依赖包 --> 3 <dependency> 4 <!-- 组织编码 --> 5 <groupId>org.springframework</groupId> 6 <!-- 项目编码 --> 7 <artifactId>spring-context</artifactId> 8 <!-- 版本信息 --> 9 <version>5.1.3.RELEASE</version> 10 </dependency> 11 </dependencies>
依赖范围
- 依赖范围<scope> 用来控制依赖和编译,测试,运行的classpath的关系
- compile:编译域
- 这个是maven中scope的默认值,可以缺省
- compile标识被依赖项目需要同当前项目编译时一起进行编译
- 项目测试期以及版本项目运行时期同样生效
- 打包的时候需要包含进去
- test:测试域
- 表示被依赖的项目仅在项目进行测试的时候生效
- 一般单元测试(junit)等依赖包配置为test
- 项目运行时不会生效
- provided:提供域
- provided意味着打包的时候可以不用打包进去,别的容器会提供
- 比如servlet-api,jsp-api,tomcat这些容器会提供
- 所以打包,运行时无需提供
- runtime:运行域
- 表示被依赖项目不会参与项目的编译
- 但项目的测试期和运行试期会参与,比如jdbc
- 与compile相比,跳过了编译这个环节
- system:系统域
- 自定义构件,指定systemPath
- 根provided相似,在系统中要以外部JAR包的形式提供
- maven不会在repository查找它
- import:导入
- 只使用在<dependencyManagement>标签
- 表示从其它pom中导入dependency的配置
依赖范围 | 说明 | 编译是否有效 | 测试是否有效 | 运行是否有效 | 是否打包 | 实际应用 |
compile | 编译范围 | √ | √ | √ | √ | ssm |
test | 测试范围 | √ | √ | × | × | junit |
provided | 容器范围 | √ | √ | × | × | servlet-api |
runtime | 运行范围 | × | √ | √ | √ | jdbc驱动 |