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管理的理解, 希望对大家有所帮助!!!