Maven(五):Maven的使用——依赖的测试
- 前言
- 一、实验六:测试依赖的范围
- 1、依赖范围
- 1.1 compile 和 test 对比
- 1.2 compile 和 provided 对比
- 1.3 结论
- 二、实验七:测试依赖的传递性
- 1、依赖的传递性
- 1.1 概念
- 1.2 传递的原则
- 三、实验八:测试依赖的排除
- 1、概念
- 2、配置方式
- 3、测试
前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!
一、实验六:测试依赖的范围
1、依赖范围
标签的位置:
dependencies/dependency/scope
标签的可选值:
compile/test/provided/system/runtime/import
1.1 compile 和 test 对比
main目录(空间) | test目录(空间) | 开发过程(时间) | 部署到服务器(时间) | |
---|---|---|---|---|
compile | 有效 | 有效 | 有效 | 有效 |
test | 无效 | 有效 | 有效 | 无效 |
1.2 compile 和 provided 对比
main目录(空间) | test目录(空间) | 开发过程(时间) | 部署到服务器(时间) | |
---|---|---|---|---|
compile | 有效 | 有效 | 有效 | 有效 |
provided | 有效 | 有效 | 有效 | 无效 |
1.3 结论
compile
:通常使用的第三方框架的jar
包这样在项目实际运行时真正要用到的jar
包都是以compile
范围进行依赖的。比如SSM
框架所需jar
包。
test
:测试过程中使用的jar
包,以test
范围依赖进来。比如junit
。
provided
:在开发过程中需要用到的“服务器上的jar
包”通常以provided
范围依赖进来。比如servlet-api
、jsp-api
。而这个范围的 jar 包之所以不参与部署、不放进war
包,就是避免和服务器上已有的同类jar
包产生冲突,同时减轻服务器的负担。说白了就是:“服务器上已经有了,你就别带啦!”
二、实验七:测试依赖的传递性
1、依赖的传递性
1.1 概念
A
依赖B
,B
依赖C
,那么在A
没有配置对C
的依赖的情况下,A
里面能不能直接使用C
?
1.2 传递的原则
在
A 依
赖B
,B
依赖C
的前提下,C
是否能够传递到A
,取决于B
依赖C
时使用的依赖范围。
⭕
B
依赖C
时使用compile
范围:可以传递
⭕B
依赖C
时使用test
或provided
范围:不能传递,所以需要这样的jar
包时,就必须在需要的地方明确配置依赖才可以。
三、实验八:测试依赖的排除
1、概念
当
A
依赖B
,B
依赖C
而且C
可以传递到A
的时候,A
不想要C
,需要在A
里面把C
排除掉。而往往这种情况都是为了避免jar
包之间的冲突。
所以配置依赖的排除其实就是阻止某些
jar
包的传递。因为这样的jar
包传递过来会和其他jar
包冲突。
2、配置方式
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>pro01-maven-java</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
<!-- 使用excludes标签配置依赖的排除 -->
<exclusions>
<!-- 在exclude标签中配置一个具体的排除 -->
<exclusion>
<!-- 指定要排除的依赖的坐标(不需要写version) -->
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
3、测试
测试的方式:在
pro02-maven-web
工程中配置对commons-logging
的排除
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>pro01-maven-java</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
<!-- 使用excludes标签配置依赖的排除 -->
<exclusions>
<!-- 在exclude标签中配置一个具体的排除 -->
<exclusion>
<!-- 指定要排除的依赖的坐标(不需要写version) -->
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
运行
mvn dependency:tree
命令查看效果:
[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT
[INFO] +- junit:junit:jar:4.12:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] \- com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
[INFO] \- org.springframework:spring-core:jar:4.0.0.RELEASE:compile
发现在
spring-core
下面就没有commons-logging
了。