前言
想看懂公司的java项目,maven相关的知识不能少(如果是通过maven管理项目、依赖)
项目结构
父pom中有fastjson依赖(父项目的pom中有被依赖的内容)
版本是1.2.75
子项目mvn01的pom中额外指定版本(mvn02和mvn03中不写fastjson的依赖)
mvn01是自己的版本,mvn02和mvn03都是父pom中的版本,说明在依赖传递的时候,继承(mvn01继承了父项目)大于依赖,02和03中,把mvn01的版本被覆盖为父pom中的版本
子项目mvn01依赖fastjson不指定版本,mvn02的pom中额外指定版本
mvn01是父pom的版本,mvn02用自己指定的,mvn03用父pom中的版本,说明在依赖传递的时候,继承(mvn02继承了父项目)大于依赖,03中把mvn02的版本被覆盖为父pom中的版本
重新打开项目
mvn01和mvn02都添加fastjson依赖,且指定不同版本
父:1.2.75
mvn01:1.2.80
mvn02:1.2.78
下图说明继承大于依赖,03中把01和02都覆盖为父项目的版本
mvn01、mvn02、mvn04都添加fastjson依赖,且指定不同版本
父:1.2.75
mvn01:1.2.80
mvn02:1.2.78
mvn02:1.2.79
mvn03的依赖中,mvn02在上面
下图说明继承大于依赖,03中把01、02、04都覆盖为父项目的版本
mvn03的依赖中,mvn04在上面
下图说明继承大于依赖,03中把01、02、04都覆盖为父项目的版本
父pom中没有fastjson依赖(父项目的pom中有被依赖的内容)--重点
mvn03依赖一个子项目
注释掉fastjson
mvn01添加的依赖:1.2.47
mvn02添加的依赖:1.2.75
mvn04添加的依赖:1.2.79
重新打开项目,omitted for duplicate表示重复省略,
mvn01自己的,mvn02自己的,mvn02中,把依赖自mvn01的版本替换为自己的了;mvn03中,用mvn02的版本,说明那个近用哪个
mvn03依赖多个子项目
添加mvn04
mvn03同时依赖mvn02和mvn04,mvn02在上面
哪个在上面,03就用哪个
mvn03同时依赖mvn02和mvn04,mvn04在上面
哪个在上面,03就用哪个
mvn03同时依赖mvn02和mvn04,mvn04在上面,但是想用mvn02的
添加排除,exclusion的版本不用指定