Maven 的依赖
1、依赖作用域:
通过<scope></scope> 来控制依赖的范围。
例如:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
只有当test的时候,才会使用此依赖。将 junit的包打入
默认的依赖范围是 compile
常用的依赖如下:
<scope>test</scope> 在测试范围有效,在编译和打包的时候不会依赖
<scope>compile</scope>在编译范围有效,在编译和打包的时候会将这个依赖存储进去
<scope>provided</scope>在编译和测试的时候有效,但是要警惕 生成war包时候,不会导入,理由是,服务器的web服务已经打开,再打包会和web服务器的包冲突
<scope>runtime</scope>在运行的时候依赖,在编译的时候不会去依赖
2、传递依赖冲突
场景一: (-->代表依赖)
A-->B1.0
C-->B1.1
D-->AC
对于以上场景 Maven是通过 pom.xml里 如果 D 先依赖 A ,则是 B1.0,如果D先依赖 C则是B1.1
场景二:
A-->B1.0
C-->B1.1
D-->AC
E--->DC
对于以上场景,maven是通过选择最短路径来判定的。
比如 E--->C---B1.1 只有两级依赖
E-->D-->A-->B1.0 有三级依赖。
所以 在E中是依赖 B1.1的
如果想要手动控制 依赖可以使用:
在依赖的对象中加入如下配置,将该依赖中的某些包剔除出去
<exclusions>
<exclusion>
<groupId>B</groupId>
<artifactId>B</artifactId>
</exclusion>
</exclusions>
3、依赖的聚合
未了避免每个模块都打包,可以使用一个pom.xmle配置
<groupId>随便取名字</groupId>
<artifactId>随便去名字</artifactId>
<version>随意版本号</version>
<packaging>pom</packaging>
<modules>
<module>A模块相对路径</module>
<module>B模块的相对路径</module>
<module>C模块的相对路径</module>
<module>D模块的相对路径</module>
</modules>
执行以上 的pom之后,他会将所有的子模块全部打包
4、使用maven继承
可以定义 类似父类的 pom.xml
子模块 的pom.xml继承 父的pom.xml
代码如下:
<parent>
<groupId>cn.group</groupId>
<artifactId>parent</artifactId>
<version>0.0.1</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
继承可以把依赖全部继承。
可以使用选择依赖。在父pom.xml中定义
<dependencyManagement>
...
</dependencyManagement>
在 子pom中通过
<groupId>cn.group.xx</groupId>
<artifactId>xx</artifactId>