一、jar包冲突
这种添加没有任何意义,不叫jar包冲突,在前的不起作用,在后的起作用,后面会覆盖前面,这不是jar包冲突这是你的问题
我们指的jar包冲突是两个包同时依赖同一种第三方jar包,而依赖的版本不同会产生冲突,这种叫jar包冲突
举个栗子
1.1 第一声明优先
我们假设这是两个不用框架的依赖包,依赖同一jar包spring-beans
两个jar包都依赖同一jar包(版本不同),依赖的层级相同,依赖包的版本由声明在前的jar包决定
前后顺序一换,就是4.2.1生效
1.2 最短路径优先
两个jar包都依赖同一jar包(版本不同),依赖的层级不同,依赖层次关系越少,优先级越高
举个栗子,下面两个jar包都依赖spring-beans,而直接写一个spring-beans的依赖版本上去,那么肯定是直接写的这个生效
springBoot用的都是高版本,我就想用低版本,那么我就像上面那样直接写一个低版本的上去,最终引用的就是写的这个低版本的jar包
1.3 指定依赖排除
排除当前jar包依赖的jar包,如下为排除context5.2.9依赖的beans,让它去依赖其它版本的beans
1.4 版本锁定
在dependencies上面再添加一层dependencyManagment,来锁定依赖版本
注意dependencyManagment只是控制版本的,不会真正的添加依赖
如下把所有的dependencies都注释掉,只留下dependencyManagment,结果jar包就一个都没有了
最终决定怎么解决jar包冲突,固定选择其中一种就好,我更倾向于版本锁定
二、Maven创建SSM项目
2.1 pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<srping.version>4.2.1.RELEASE</srping.version>
<mybatis.version>3.3.0</mybatis.version>
<slf4j.version>1.7.12</slf4j.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>5.0-1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<scope>test</scope>
</dependency>
<!-- spring框架包 start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${srping.version}</version>
</dependency>
<!-- spring框架包 end -->
<!-- mybatis框架包 start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- mybatis框架包 end -->
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<!-- C3P0 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
通过配置properties来控制spring的唯一版本号,避免jar包冲突,再者改的时候也很方便,改spring的版本号即可
2.2 移除重包
一个一个找,一个一个移除
在dependencies中移除重包
实际依赖的所有jar包有这么多
而删完重包添加的jar包只有这么多