所有的依赖都是通过坐标来进行存储的(GAV–>groupId、artifactId、version)。Maven坐标就是为了定位一个唯一确定的jar包。
1.组成
我们经常用到的一些开源框架,他们的名称和版本号以及版本的类型就确定了他们的唯一性,我们引用这些开源框架时,就可以通过坐标来指定他们
他们的唯一性是由三个点组成的
groupId: 代表当前项目组织名称
artifactId:代表当前项目名称
version: 代表当前项目的当前版本
2.查询的地方
http://mvnrepository.com这个网址就可以提供了jar的查询
使用maven还可以把项目分离拆开,即把service,dao等等子模块进行拆开;
3.依赖的范围
1、test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖。
2、compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去。默认值。
3、provided依赖:在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突。
4、runtime在运行的时候依赖,在编译的时候不依赖。
说明如果范围是test,是不会向下传递的。但是compile是可以向下传递的
自己亲测:创建两个maven工程,都打开他们的pom.xml文件,在里面这上坐标jar然后,让一个项目去依赖另外一个项目,这时,被依赖的项目里面的jar包,如果不是test范围的就可以在那个项目中显示出来
依赖的传递,同版本冲突
第一种情况:也就是说在同一个项目中如果,放进了两个相同的jar包,但是版本不一样,那么就会选择位置最低下版本的jar包,而会抛弃掉最上面的jar。取决于你放的位置。
第二种情况:就是在两个项目中,项目B要依赖项目A的,但是在这两个项目中都有相同的依赖jar座标,但是版本不一样,这个时候就会选择直接依赖,就是会优先选择自己的依赖;
可以看到项目02中的mysql驱动包是选择自己的,虽然它有依赖别人的,但是会优先选择自己的;
以直接依赖的版本为准
希望精确地控制依赖的jar包,就要使用排除《排除依赖》
可以把依赖项目中的不想要的jar排除开
可选依赖
这个选项就是根据jar包座标中的属性来设置的
当这个属性设置为true是这个依赖不会向下传递
如果设置成为了false就会向下传递