...
...
...
...
...
...
...
...
...
...
groupId、artifactId和version:依赖的基本坐标
type:依赖的类型对应于项目坐标的packaging。大部分不要用声明,默认jar
scope:依赖的范围
optional:标记依赖是否可选
exclusions:用来排除传递性依赖
依赖范围用来控制依赖与三种classpath(编译classpath、测试classpath、运行classpath)的关系,Maven有一下几种依赖范围:
compile:编译依赖范围。若没指定默认就是该依赖范围。对编译测试运行都有效。如spring-core
test:测试依赖范围。只对测试有效。如JUnit
provided:已提供依赖范围。对编译和测试有效,运行时无效。如servlet-api
是因为运行项目时候,由于容器已经提供,就不需要Maven重复地引入一遍
runtime:运行时依赖范围。对测试和运行有效,但在编译主代码时无效。如JDBC驱动实现
是因为编译时候只需要JDk提供的JDBC接口,只有在测试执行时才需要实现接口具体的JDBC驱动
system:系统依赖范围。该依赖与三种classpath的关系和provided依赖范围完全一致。但是system范围的依赖必须通过systemPath元素显示地指定依赖文件的路径。由于依赖不是通过Maven仓库解析的,而且往往与本机绑定,可能造成不可移植,因此应谨慎使用。systemPath可以引用环境变量,如:
javax.sql
jdbc-stdext
2.0
system
${java.home}/lib/rt.jar
import(Maven2.0.9+):导入依赖范围。该依赖范围不会对三种classpath产生实际影响,
第一直接依赖(左一列)和第二直接依赖(上一行)的依赖结果
compile test provided runtime
compile compile -- -- runtime
test test -- -- test
provided provided -- provided provided
runtime runtime -- -- runtime
可选依赖配置
true 理想情况下不应该使用可选依赖,可选依赖不会传递
如果有直接依赖中有可选依赖,就需要手动根据需要选择是否需要此依赖,需要就显示的声明 明确写明依赖
排除依赖
com.juvenxu.mvnbook
project-c
声明exclusion时只需要groupId和artifactId,不需要version元素,传递依赖依赖调节等可以通过这两点确定唯一的传递依赖,若还需要依赖但有不想要传递的那个依赖就可以先排除,然后再下面再添加一个具体想要的依赖(如a依赖b,b依赖不稳定版本c情况,b排除不稳定c,然后再a的pom中直接依赖一个稳定的c)
归来依赖
...
2.5.6
org.springframework
spring-core
${springframework.version}
org.springframework
spring-beans
${springframework.version}
...
mvn dependency:list
mvn dependency:tree
mvn dependency:analyze
阅读(2283) | 评论(0) | 转发(0) |