一、maven工程的信息
公司域名说明:GroupId填写公司域名的倒序。
版本号说明:
- SNAPSHOT:测试版本
- RELEASE:发行版本
二、maven依赖范围
- compile(默认):项目编译、单元测试、运行部署的时候该依赖有效。如:spring-core包。
- provided:项目编译、单元测试的时候该依赖有效。
如:Tomcat中自带的包servlet-api、jsp-api。若为compile作用域,因为运行部署到Tomcat后会与Tomcat的包冲突,所以在Tomcat中自带的包需要设置为该作用域。 - test:项目单元测试的时候该依赖有效。如:Junit包。
- runtime:项目编时不需要此依赖。如:JDBC驱动。
- system:虽然与provided作用域一样,但是该包从本地仓库中查找,不会从maven仓库中查找,一定需要配合systemPath属性使用。
三、直接依赖和传递依赖
例:A项目依赖于B,B依赖于C。
则:B为A的直接依赖,C为A的传递依赖。
传递依赖的冲突
例:A项目依赖于B和C,B依赖D(1.1版本),C也依赖D(2.1版本)。
则:D为A的传递依赖,但是D的版本号有冲突,称为传递依赖冲突。
怎么解决传递依赖冲突?
方式一、maven的处理方式:
maven解决传递依赖冲突的两个原则:
- 第一声明者优先原则
即:A先声明依赖B,然后在声明依赖C,这样就会使用B依赖的D(1.1版本) - 最短路径优先原则
直接依赖的优先级高于传递依赖,所以可以将D声明为直接依赖,配置版本号。
方式二、排除依赖
若:想用C依赖的D(2.1版本),则可以把B依赖的D(1.1版本)排除掉。
例:
struts2-spring-plugin 依赖 spring-beans:3.0.5.RELEASE
spring-context 依赖 spring-beans:4.2.4.RELEASE
现在来排除 struts2-spring-plugin 依赖的 spring-beans:3.0.5.RELEASE,使用 spring-context 依赖 spring-beans:4.2.4.RELEASE
方式三、版本锁定
使用 dependencyManagement 来声明依赖的版本号。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
更新时间:2020-1-7