maven依赖性具有传递性:A.jar -> B.jar -> C.jar
(当且仅当B.jar -> C.jar 的范围是compile(<scope>compile</scope>))
程序示例:
if(A.jar 依赖 B.jar){
if(B.jar 依赖 C.jar && scope == compile){
return A.jar 依赖 C.jar
}
}
return A.jar 不依赖 C.jar
maven pom.xml 依赖原则:
路径最短依赖原则:自身依赖的jar包 优于 jar包依赖的其它相同的jar
A.jar依赖spring4.0.jar,依赖B.jar
B.jar依赖spring5.0.jar
自己依赖的4.0长度是1,5.0的长度是2,所以最终A会依赖spring.4.0的jar
路径相同时:在同一个pom.xml中,有两个相同的依赖(仅版本不一致):后面声明的会覆盖前面的
不同的pom.xml中(都是引进来的jar),前面声明过了,后面将不会在声明。
可以将依赖版本号集中写在<properties></properties>标签中。例如:
<properties>
<!-- spring.version 这个可以自定义-->
<spring.version>4.3.4.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<!--使用EL表达式获取上面properties中的sping.version标签的值-->
<version>${spring.version}</version>
</dependency>
</dependencies>
上面看到的maven传递性是具有局限性的(scope == compile)
【小提示】
maven创建项目时打包方式的选择
java工程选择 jar
web 工程选择 war
父工程 选择 pom(maven继承,父工程需要选择pom)
使用maven继承(只要B.jar依赖的A都能依赖):
if(A.jar 依赖 B.jar){
if(B.jar 依赖 C.jar){
return A.jar 依赖 C.jar
}
}
return A.jar 不依赖 C.jar
继承实现步骤:
1.创建父工程 父工程的打包方式选择pom
2.在父工程的pom.xml中依赖需要写在:<dependencyManagement></dependencyManagement>中
<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>
</dependencies>
</dependencyManagement>
3.在子工程的pom.xml中需要写
<!--给当前工程继承一个父工程1.加入父工程gav 2.当前工程的pom.xml到父工程的pom.xml的相对路径-->
<parent>
<!--1.加入父工程gav-->
<groupId>com.mf</groupId>
<artifactId>father</artifactId>
<version>1.0-SNAPSHOT</version>
<!--2.当前工程的pom.xml到父工程的pom.xml的相对路径-->
<relativePath>../father/pom.xml</relativePath>
</parent>
如果子工程的groupId 和 version 相同。可以只写artifactId(继承)
4.在子类中需要声明:要使用父类的哪些依赖
<dependencies>
<!--声明需要父类中的junit。只需要ga 不需要 v-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>