Maven依赖的查询、传递和继承

一、依赖包查询

1.所以依赖通过GAV坐标来搜索(GAV:groupid,artifactId,version)
2.有一些网上的仓库提供了坐标的查询
MVNRepository:http://mvnrepository.com/
The Central Repository:http://search.maven.org/
3.通过<dependencies><dependency/></dependencies>来设置依赖
4.maven搜索依赖的方式,首先会在本地仓库查询,如果本地仓库没有该包,就会去中央仓库查询
二、依赖的范围
依赖的范围使用scope标签
1.compile,缺省值,指编译和打包的时候都会把这个依赖包含进去
2.test,指测试范围时有效,打包的时候不会把这个依赖包含进去
3.provided,指编译和测试时有效,打包的时候不会把这个依赖包含进去,如servlet-api,因为在servlet-api在tomcat等web服务器中已经存在,如果打包会冲突。
4.runtime,指运行的时候有效,打包的时候不会把这个依赖包含进去
5.system,指编译和测试时有效,打包的时候不会把这个依赖包含进去,需要显式提供包含依赖的jar,Maven不会在Repository中查找它
三、依赖的传递
1.依赖会被传递
A依赖C,B依赖A ==> B依赖C(这种依赖是基于compile这个范围进行传递)
2.依赖冲突的解决
1)如何B依赖A1.0,C依赖A1.2 ==> D依赖B和C,对于传递的A依赖,在pom文件中,先写B和C中的哪个,D就对应依赖对应的A
2)如果B依赖A1.0,C依赖A1.2,D依赖C ==> F依赖B和D,对于传递的A依赖,如果路径长度不一致,怎依赖于路径短的,则F依赖于B的A1.0
3.如果希望精确的控制依赖包,可以使用依赖的排除功能进行控制
四、聚合和继承
1.如何我们的项目包含多个模块我们一个一个编译,会太麻烦,我们可以建一个聚合项目,通过modules来统一操作
2.继承可以复用父类的pom,可以为我们提高pom复用
子模块可以通过parent标签来导入要继承的pom
依赖继承采用dependencyManagement用来统一管理,在子模块中需要那个依赖,只需要写groupId和artifactId就可以,采用依赖管理既可以有效的控制依赖,有能在一定程度上避免依赖冲突。

posted on 2014-04-26 11:08  暮风吹雪  阅读(3082)  评论(1编辑  收藏  举报

导航