目录
一、在pom.xml中dependencies节点引用我们所需要的依赖
二、scope节点指定依赖范围,常见的依赖范围有三种:compile(默认)、test、provided
一、在pom.xml中dependencies节点引用我们所需要的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>xin.yangshuai</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Hello</name>
<description>Demo project for Hello</description>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
二、scope节点指定依赖范围,常见的依赖范围有三种:compile(默认)、test、provided
-
从三个方面看这三种依赖范围的区别
- 是否对主程序有效(main目录下的程序):主程序代码是否可以引用这个依赖
- 是否对测试程序有效(test目录下的程序):测试程序是否可以引用这个依赖
- 是否参与打包(部署):打包(package)后,这个依赖是否会被打到包内(lib文件夹内)
-
maven项目的标准目录结构
Hello |---src |---|---main |---|---|---java |---|---|---resources |---|---test |---|---|---java |---|---|---resources |---pom.xml
-
三种依赖范围的区别
依赖范围(scope) 是否对主程序有效 是否对测试程序有效 是否参与打包(部署) 典型例子 compile 有效 有效 参与 spring-core test 无效 有效 不参与 junit provided 有效 有效 不参与 servlet-api.jar -
测试程序常规情况下是不参与打包的
-
-
原因分析
- compile依赖范围:默认的依赖范围,开发时需要,部署时也需要(运行时servlet容器不会提供),一般的就是这样。
- test依赖范围:主程序(main)是无法依赖test范围的jar的,开发时就不可以(那些jar主程序也是用不到的),只有测试程序可以依赖。要知道,测试程序常规是不会参与打包的,test范围的依赖也不参与打包,只是在开发阶段会用到,或者maven编译(compile)时会执行测试程序。
- 如果开发时主程序可以依赖test范围的jar,那么打包时由于test范围的jar不参与打包,所以打成的包运行时肯定就会报错。
- provided范围依赖:开发时,由于没有运行时环境,有些jar我们需要暂时依赖(不依赖有些方法就会找不到,用不了),但是项目打包部署运行时,由于运行时环境(servlet容器,比如:tomcat)会提供一些jar包,所以开发时那些暂时依赖的jar包就不能参与打包了,否则会发生冲突导致报错。
三、Tips
-
如有不对的地方还请告知,感激不尽
-
整体内容参考视频教程:http://www.gulixueyuan.com/my/course/42
四、其它maven相关博客
- maven依赖范围:https://blog.csdn.net/shuair/article/details/105350415
- maven依赖传递性:https://blog.csdn.net/shuair/article/details/105401296
- maven统一依赖版本号:https://blog.csdn.net/shuair/article/details/105404764
- maven聚合:https://blog.csdn.net/shuair/article/details/105416365