Maven是一个Java项目管理和构建工具,它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具。
当我们使用commons-logging这些第三方开源库的时候,我们实际上是通过Maven自动下载它的jar包,并根据其pom.xml解析依赖,自动把相关依赖包都下载后加入到classpath。
1. 主要功能
(1)提供了一套标准化的项目结构;
(2)提供了一套标准化的构建流程(编译,测试,打包,发布……);
(3)提供了一套依赖管理机制。
2. Maven标准目录结构
3. 依赖管理
maven定义了四种依赖关系
scope | 说明 | 示例 |
---|---|---|
compile | 编译时需要用到该jar包(默认),此类最常用,Maven会把这种类型的依赖直接放入classpath | commons-logging |
test | 编译Test时需要用到该jar包 | junit |
runtime | 编译时不需要,但运行时需要用到 | mysql |
provided | 编译时需要用到,但运行时由JDK或某个服务器提供 | servlet-api |
Q: Maven如何知道从何处下载所需的依赖?也就是相关的jar包?
A: Maven维护了一个中央仓库(repo1.maven.org),所有第三方库将自身的jar以及相关信息上传至中央仓库,Maven就可以从中央仓库把所需依赖下载到本地。
Maven并不会每次都从中央仓库下载jar包。一个jar包一旦被下载过,就会被Maven自动缓存在本地目录(用户主目录的.m2目录),所以,除了第一次编译时因为下载需要时间会比较慢,后续过程因为有本地缓存,并不会重复下载相同的jar包.