1、在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>
2、scope节点指定依赖范围,常见的依赖范围有三种:compile(默认)、test、provided
从三个方面看这三种依赖范围的区别
是否对主程序有效(main目录下的程序):主程序代码是否可以引用这个依赖
是否对测试程序有效(test目录下的程序):测试程序是否可以引用这个依赖
是否参与打包(部署):打包(package)后,这个依赖是否会被打到包内(lib文件夹内)
maven项目的标准目录结构
Hello
|---src
|---|---main
|---|---|---java
|---|---|---resources
|---|---test
|---|---|---java
|---|---|---resources
|---pom.xml
3、种依赖范围的区别
测试程序常规情况下是不参与打包的
4、原因分析
4.1 compile依赖范围
默认的依赖范围,开发时需要,部署时也需要(运行时servlet容器不会提供),一般的就是这样。
4.2 test依赖范围
主程序(main)是无法依赖test范围的jar的,开发时就不可以(那些jar主程序也是用不到的),只有测试程序可以依赖。要知道,测试程序常规是不会参与打包的,test范围的依赖也不参与打包,只是在开发阶段会用到,或者maven编译(compile)时会执行测试程序。
如果开发时主程序可以依赖test范围的jar,那么打包时由于test范围的jar不参与打包,所以打成的包运行时肯定就会报错。
4.3 provided范围依赖
开发时,由于没有运行时环境,有些jar我们需要暂时依赖(不依赖有些方法就会找不到,用不了),但是项目打包部署运行时,由于运行时环境(servlet容器,比如:tomcat)会提供一些jar包,所以开发时那些暂时依赖的jar包就不能参与打包了,否则会发生冲突导致报错。