如果我们的项目依赖第三方的jar包:
- Commons Logging发布的jar包在那里下载?
- 使用Log4j需要哪些jar包
- 其他依赖:junit,Javamail,MySQL驱动...
搜索引擎——手动下载——解压——放入classpath:过程非常繁琐
maven解决了依赖管理的问题
Hello项目-->依赖abc -> abc又依赖于xyz
当我们生命了abc的依赖时,maven自动把adb依赖的xyz jar包也加入到项目依赖中,不需要我们自己去研究abc是否需要依赖xyz。
所以maven的第一个作用就是解决了依赖管理,我们声明了自己的项目,需要abc,maven就会自动倒入abc的jar,再判断出abc又需要依赖xyz,又会自动倒入xyz的jar包,这样最终我们的jar包会依赖abc和xyz这2个jar包
一个复杂的依赖示例
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.4.2Release</version>
</denpendency>
当我声明1个spring-boot-start-web依赖时,maven会自动解析并判断出需要大概20-30个依赖。如果手动去管理这些依赖是非常费时费力的,而且出错的概率很大,maven的依赖关系有以下几种:
scope | 说明 | 示例 |
---|---|---|
compile | 编译时需要用到该jar包(默认) | commons-logging |
test | 编译Test时需要用到该jar包 | junit |
runntime | 编译时不需要,但运行时需要 | log4j |
provided | 编译时需要用到,但运行时有JDK或某个服务器提供 | servlet-api |
maven从何处下载所需的依赖:
maven维护了一个*仓库
第三方库将自身上传值*仓库
maven从*仓库把所需依赖下载到本地
maven会自动缓存已下载过的jar包(~/.m2/repository)
总结
- maven通过解析依赖关系确定项目所需的jar包
- 常用的4中scope:compile(默认)、test、runtime、provided
- maven从*仓库下载所需jar包并缓存在本地
- 可以通过镜像加速下载