【 Maven 的依赖范围 】

时间:2019-02-16
本文章向大家介绍【 Maven 的依赖范围 】,主要包括【 Maven 的依赖范围 】使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Maven 的依赖范围(有五种)

在 pom.xml 文件中添加依赖的时候,可以定义 jar包 的依赖范围:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.ys</groupId>
    <artifactId>maven-project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope><!-- 定义以依赖范围 -->
        </dependency>
    </dependencies>

</project>

1、compile (默认依赖范围)

编译范围,指 A 在编译时依赖 B ,此范围为默认依赖范围

编译范围的依赖会用在编译、测试、运行、打包,由于运行时需要,所以编译范围的依赖会被打包。

2、provided

provided 依赖只有在当 JDK 或者 一个容器已经提供该依赖之后才使用。

provided依赖在 编译、测试时需要,在运行、打包时不需要。

例如:servlet api 被 tomcat 容器提供。

3、runtime

runtime 依赖在 编译时不需要,在 测试、运行、打包时需要。

例如:jdbc 驱动包,由于运行时需要,所以 runtime 范围的依赖会被打包。

4、test (作用域在测试环境)

test 范围依赖,在 编译、运行、打包时不需要,测试时需要。

例如:junit ,由于运行时不需要,所以 test范围依赖不会被打包。

5、system

system 范围依赖 与 provided 类似,但必须显式提供一个对于本地系统中 jar 文本的路径,需要指定 systemPath 磁盘路径,system 依赖不推荐使用

补充:

依赖范围 对于编译classpath有效 对于测试classpath有效 对于运行时classpath有效 例子
compile Y Y Y spring-core
test - Y - Junit
provided Y Y - servlet-api
runtime - Y Y JDBC驱动包
system Y Y - 本地的,Maven仓库之外的类库

小结:

  • 默认引入 的 jar 包 ------- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )
  • servlet-api 、jsp-api ------- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)
  • jdbc 驱动 jar 包 ---- runtime (测试、运行 有效 )
  • junit ----- test (测试有效)

依赖范围由强到弱的顺序是:compile>provided>runtime>test