1. maven 坐标简介
每个maven项目都有一个坐标
groupId + artifactId + version + packaging + classifier,五个维度的坐标,唯一定位一个依赖包。
任何一个项目,都是用这五个维度唯一定位一个发布包
实际上后面两个维度较为少用,大多数的场景下,唯一定位一个依赖的就是三个维度,groupId + artifactId + version
2.maven坐标设置
groupId:是以所在公司或者组织的官网的域名倒序来开头,然后加上项目名称
比如说,你现在在卡猫,www.collmall.com,公司里任何一个项目的开头,就可以用com.collmall来打头
artifactId:其实就是项目中的某个模块,或者某个服务。
version:该工程的版本号
packaging:这个工程的发布包打包方式,一般常用的就jar和war两种,java -cp执行一个jar包,war可以放到一个tomcat容器里去跑的web工程。
classifier:很少用,定义某个工程的附属项目,比如hello-world工程的,hello-world-source工程,就是源码,可能是类似于hello-world-1.0-SNAPSHOT-source.jar这样的东西。
3.依赖范围
<scope></scope>
compile:默认,对编译、测试和运行的classpath都有效。一般都是用这种scope
test:仅仅对于运行测试代码的classpath有效,编译或者运行主代码的时候无效,仅仅测试代码需要用的依赖一般都会设置为这个范围。
provided:编译和测试的时候有效,但是在运行的时候无效,因为可能环境已经提供了,比如servlet-api。
runtime:测试和运行classpath有效,但是编译代码时无效。
4.可选依赖
<optional>true</optional>
此时依赖传递失效,不会向上传递。
5.如何解决这样的依赖冲突
使用 mvn dependency:tree 命令,用dependency插件的tree goal,执行,进行依赖链条分析。
剔除冲突的依赖
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
再次执行 mvn dependency:tree ,查看maven依赖情况