<!-- 表示编译的时候不依赖,而在测试或者运行的时候 自动依赖 -->
<scope>runtime</scope>
<!-- 编译依赖,打包 测试 运行都将依赖存储进去,默认为 compile 依赖 依赖会传递 -->
<scope>compile</scope>
<!-- 编译和测试过程依赖有效,最后使用命令打成war 包时不会加入 -->
<scope>provided</scope>
<!-- 测试范围依赖,打包和编译 都不使用这个依赖 ,其次 test范围的资源 也不支持依赖传递 -->
<scope>test</scope>
当A项目依赖 log4j 1.2.9 B项目依赖 log4j 1.2.17 时,
若C项目依赖于 A、B两个项目时, 等同于C间接的依赖到 log4j 1.2.9 log4j 1.2.17 两个包,
A、B项目依赖 log4j 的级别相同,都直接连接
此时 C项目的 pom.xml 如果先依赖 A项目,则C依赖的 log4j 版本为 1.2.9
如果先依赖B项目,则C依赖的 log4j 版本为 1.2.17
当A项目依赖于D项目,D项目依赖于 log4j 1.2.17 B项目依赖 log4j 1.2.9 时,
若C项目依赖于 A、B两个项目时, 等同于C间接的依赖到 log4j 1.2.9 log4j 1.2.17 两个包,
但A、B项目依赖 log4j 的级别不同,A是间接链接到log4j
此时 C项目的 pom.xml 中 C依赖的 log4j 版本为 1.2.9
取 依赖层次短的 log4j
若C项目也直接依赖 log4j 1.2.16, 此时 C项目中maven依赖 log4j 则直接为 1.2.16 依赖层次最短
当包产生冲突的时候,可以进行排除依赖操作。
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>user-log</artifactId>
<version>${project.version}</version>
<!-- 排除依赖 一般包冲突的时候,可以选择这个方法 -->
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>