Maven管理:
1. 依赖范围
maven的依赖范围有4种, 分别是:
compile: 对主代码有效, 对测试代码有效, 被打包运行时有效.
test: 对主代码无效, 对测试代码有效, 被打包运行时无效.
provided: 对主代码有效, 对测试代码有效, 被打包运行时无效.
runtime: 对主代码无效, 对测试代码无效, 被打包运行时有效.
其中依赖范围用scope 来控制和编译,测试,运行的classpath的关系.
2. 依赖传递
这里举个例子:
现在有三个工程项目, 分别是A, B, C, 其中B工程依赖了A工程, C工程依赖了B工程,
那么, A,B工程分别就是B,C工程的直接依赖,BC为第一直接依赖,AB为第二直接依赖, 而A工程就是C工程的间接依赖,
所依赖工程中pom.xml可以传递下去,
当第二依赖的范围scope 为compile 的时候, 依赖得以传递,传递性依赖的范围与第一直接依赖的范围一致.
当第二依赖的范围scope 为test 的时候, 依赖不会得以传递.
当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided.
当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime.
3. 依赖冲突
maven的依赖冲突可以分为两种, 一种是跨pom的冲突, 另外一种就是同一个pom.xml 文件的冲突.
现在A工程的pom.xml 中依赖了junit4.9 的版本, 则B,C工程中都是使用了junit4.9 的版本.
1). 跨pom.xml的冲突:
如果B工程中的pom.xml 重新依赖了junit4.8 的版本, 那么,工程B, C就都会使用junit4.8 的版本.
2). 同一个pom.xml的冲突:
如果在A工程中先依赖了junit4.9的版本, 然后下面又在依赖了junit4.8 的版本, 那么,按照就近原则,越下面越近, 最后使用的是junit4.8 的版本.
总结: maven的依赖如果发生了冲突, 服从就近原则.
4.依赖可选
pom.xml文件中, Optional标签表示该依赖是否可选,默认是false。如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。
5.依赖排除
以上
pom.xml文件中,Exclusions标签可以排除依赖.
例如: 在C工程中排除掉A工程依赖
<dependencies>
<dependency>
<groupId>com.c.maven</groupId>
<artifactId>C</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.a.maven</groupId>
<artifactId>A</artifactId>
</exclusion>
</dependency>
</dependencies>
以上就是小编对maven管理的理解, 希望对大家有所帮助!!!