1.java的包管理

image.png

1.1在类路径(classpath)找(引用到的)类

image.png
image.png
当多个同名的类出现在classpath中时,会引用先出现的那个类,但有可能那个类正好有2个版本,而有问题的版本在前面,这样就正好引用了有问题的版本

2.maven的包管理

2.1maven出现前的包管理

image.png
image.png

2.2maven包管理

image.png
image.png
image.png

2.3语意化版本

image.png

3.包冲突和解决

包冲突会提示一下的异常
image.png

3.1冲突解决原则

image.png
在下面这个例子中:项目依赖了A-B-C1,D-C2,由于C1和C2不能同时出现,而C2距离项目更近,所以maven会使用C2,淘汰C1
image.png

3.2查看maven依赖树

image.png

3.3解决包冲突

直接依赖需要的包

如果是这种情况,本来是要依赖C0.2版本的,但是maven错误的依赖了C0.1版本,一种解决方法是直接从项目中依赖C0.2版本
image.png
解决方法
image.png

不依赖不需要的包

image.png
image.png

安装maven helper 插件

image.png
image.png
image.png

3.4解决包冲突实例

运行main函数,发现报错

image.png

进入报错的文件

image.png

找到出错的包

image.png

从maven库获取到相关包的源码地址

image.png

找到源码,发现问题所在

image.png

从idea的maven库中得到另一个spring-web版本

image.png

从GitHub获取到4.3.6版本的源码

image.png

更改pom文件的spring-web包版本

image.png

运行main函数,报错消失

image.png
image.png

3.5scope实现依赖隔离(test,compile,provided)

image.png

编译:源代码-》字节码
运行:jvm运行字节码
image.png

4.maven相关

比较语义化版本的大小

https://juejin.cn/post/6860649976163205134