Maven
依赖管理
1.降低jar包冗余,提升jar包同步的效率
2.对依赖进行版本控制
3.提供完整的构建生命周期
依赖冲突
eg.A应用依赖B应用,B应用依赖C应用。这就导致A应用间接一来了C应用。
如果A应用间接依赖了多个C应用,且版本都不一样,maven有个仲裁机制:
提示信息
如果这时候打war包出来启动很有可能会遇到因依赖冲突而出现的NoClassDefFoundError或NoSuchMethodError,导致编译期正常的代码无法在运行期跑起来。
仲裁机制
(1)优先按照依赖管理元素中指定的版本声明进行仲裁
(2)短路径优先原则
(3)若路径相同,则看在pom文件中声明的位置。
解决依赖冲突的方式
1.手动去掉依赖包,使用exclusive标签来忽略
a.通过mvn -Dverbose dependency:tree命令检查版本冲突
(其中omitted for duplicate表示有jar包被重复依赖,最后写着omitted for conflict with xxx的,说明和别的jar包版本冲突了,而该行的jar包不会被引入。)
b.如果是idea,可以安装maven helper插件来检查依赖冲突
(maven helper插件安装成功,点开pom.xml会发现多了一个Dependency Analyzer视图,上面按钮的图标含义如下Conflicts(查看冲突),All Dependencies as List(列表形式查看所有依赖),All Dependencies as Tree(树形式查看所有依赖))
c.排除依赖
(排除依赖如果是idea,可以使用maven helper插件进行排除。点开pom.xml,切换到Dependency Analyzer视图,选择All Dependencies as Tree,点击要排除的jar,右键会出现Execlude选项,如下)
2.版本锁定
使用dependencyManagement进行版本锁定,depecdencyManagement可以统一管理项目的版本号,确保应用的各个项目依赖和版本号一致。