Java第四十五天,Maven高级篇(一),依赖冲突、pom常见标签
一、Jar 依赖包冲突问题
1.产生冲突的根源
有多个 jar包 对同一 jar包 同时有依赖关系,而且二者对该 依赖jar 包的版本不一致,最终导致产生 jar包依赖 冲突
2.解决办法
(1)第一声明优先原则
哪个jar包的坐标先定义,该 jar包 就是先声明的;先声明的 jar包 坐标下的依赖包可以优先进入项目中
(2)路径近者优先原则
直接依赖 路径比 传递依赖 路径近,那么最终项目进入的 jar包 会是路径近的直接依赖
- 直接依赖 ===> 项目中直接导入的 jar包 就是该项目的直接依赖包;
- 传递依赖 ===> 项目中并没有直接导入的 jar包 也由其他 直接依赖jar包 的依赖而被Maven 自动导入
(3)直接排除法
通过 <exclusion> 标签排除多余的依赖包
- <exclusion> ===> 当我们要排除某个 jar包 依赖包的时候,在配置 <exclusion> 标签的时候,内部可以不写版本号;因为此时依赖包使用的版本号默认和本 jar包 一样
<dependency>
<groupId>项目组织</groupId>
<artifactId>项目</artifactId>
<version>项目版本</version>
<exclusions>
<exclusion>
<groupId>要排除的项目所在组织</groupId>
<artifactId>要排除的项目</artifactId>
</exclusion>
</exclusions>
</dependency>
二、pom.xml 常见标签详解
Maven 工程是可以分为父子依赖关系的,凡是依赖别的项目后,拿到别的项目的依赖包,都属于传递依赖
- <dependencyManagement> ===> 锁定 jar包 版本;此标签只有锁定 jar包 版本的作用,并没有导入 jar包 的功能
- <dependencies> ===> 父级依赖;可存放若干 <dependencie> 标签
- <dependencie> ===> 子级依赖;导入 jar包
- <build> ===> Project Build,全局配置;即是<project>的直接子元素
- <build> ===> Profile Build,配置;即是<profile>的直接子元素
- <plugins> ===> 父级插件;可存放若干 <plugin> 标签
- <plugin> ===> 子级插件;导入插件