maven处理依赖优先级原理
2023-08-11 16:41:53 4 举报
maven处理依赖优先级原理及问题总结
作者其他创作
大纲/内容
依赖分类: 直接依赖,就是本项目 dependencies 部分的依赖 间接依赖,就是本项目 dependencies 部分的依赖所包含的依赖 依赖管理,就是本项目 dependency management 里面的依赖 parent 的直接依赖 parent 的间接依赖 parent 的依赖管理 pom 的依赖管理
常见问题:Java Maven编译时没问题,运行时报 Caused by:java.lang.NoSuchMethodError Caused by:java.lang.NoSuchMethodError这种一般是子模块的版本依赖是正确的,但是启动类所在的模块是依赖是错误的
优先级:直接依赖>依赖管理>间接依赖
maven加载依赖原理 1.首先,将 parent 的直接依赖,间接依赖,还有依赖管理插入本项目依赖最前面,包含本项目的直接依赖,间接依赖还有依赖管理之前 2.对于直接依赖,如果有 version,那么就依次放入 DependencyMap 中。如果没有 version,则从依赖管理中查出来 version,之后放入 DependencyMap 中。key 为依赖的 groupId + artifactId,value为version,后放入的会把之前放入的相同 key 的 value 替换 3.对于每个依赖,各自按照 1,2 加载自己的 pom 文件,但是如果第一步中的本项目 dependency management 中有依赖的版本,使用本项目 dependency management的依赖版本,生成 TransitiveDependencyMap,这里面就包含了所有的间接依赖。 4.所有间接依赖的 TransitiveDependencyMap, 对于项目的 DependencyMap 里面没有的 key,依次放入项目的 DependencyMap 5.如果 TransitiveDependencyMap 里面还有间接依赖,那么递归执行3, 4。由于是先放入本项目的 DependencyMap,再去递归 TransitiveDependencyMap,这就解释了 maven 依赖的最短路径原则。pom 的效果基本和 Parent 一样,只是一般限制中,pom 只有 dependencyManagement 没有 dependencies
直接依赖之间,相同依赖不同版本,以最后的为准
间接依赖之间,最短路径为准
间接依赖之间,路径长度一样,优先声明为准
0 条评论
下一页