侧边栏壁纸
  • 累计撰写 2,046 篇文章
  • 累计创建 73 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

maven依赖范围详解-scope

大猿本猿
2021-11-28 / 440 阅读 / 0 字

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、种依赖范围的区别

image

测试程序常规情况下是不参与打包的

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包就不能参与打包了,否则会发生冲突导致报错。