一、标签
dependencyManagement:只是声明有那些依赖,并不实际引入。子模块引入对应的包时可以不写version版本。
dependencies:依赖管理
dependencie:
groupId:groupId
artifactId:artifactId
version:version
type:项目类型
scope:作用域~
test:仅在编译和运行测试代码时才有效。
compile:默认的,编译、测试、运行时有效。
provided:编译和测试有效,运行无效。例如servlet-api,环境自己提供了
runtime:运行时有效,比如数据库驱动jar
system:需要配合systemPath一起使用
systemPath:系统jar包的位置,例如 ${project.basedir}/src/main/resources/lib/szcaservice.jar。其中${project.basedir}代表了系统运行时的根路径。
exclusions:需要排除的jar包
exclusion:
groupId:需要排除的groupId
artifactId:需要排除的artifactId
optional:可选依赖。假设a依赖b,b依赖c。b中依赖c的dependencie的optional为true时,a就不会依赖c,必需a也声明依赖c才会真正的依赖c。如果optional为false,就是默认的,a也会依赖c。
二、依赖调解机制
比如A依赖B依赖C依赖D(V1.0)
,A依赖F依赖D(V2.0)
。这里A依赖了两个版本的D,那么maven会选择里A最近的那一条线路,选择2.0版本。如果依赖链路一样长,就拿个先声明用哪个
三、如何解决依赖冲突
有时候maven通过依赖解决机制选择错了jar包,那就很尴尬啦,这个时候需要自己调节。如果使用idea,推荐安装maven helper插件。
如果有冲突得到话会显示成红色,并且可以一键排除jar包