一、理解Maven scope依赖范围的作用

Maven在编译项目主代码的时候需要使用一套classspath。总共有三种classpath,分别对应于Maven编译项目主代码的时候、Maven编译和执行测试的时候、实际运行Maven项目的时候。

  • Compile: 编泽依赖范围.如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。比如spring-core依赖,在编辑、测试、运行的时候都需要使用该依赖。

test: 测试依赖范围。使用此依赖范围的Maven依赖,只对测试的classpath有效,在编译主代码或者运行项目时无法使用此类依赖。比如JUnit的依赖,它只有在编译测试代码及运行测试的时候需要

  • provided:以提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试的classpath有效,但在运行时无效。比如servlet-api,编译和测试项目的时候需要用到该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复的引入一遍。
  • runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。比如JDBC驱动的实现,项目主代码编译的时候,只需要JDK提供的JDBC接口就可以,但是在执行测试或者运行项目的时候才需要实现实现JDBC接口的具体JDBC驱动。
  • system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。只是,使用system范围依赖时,需要指定systemPath元素显示地指定依赖文件的路径。由于此依赖不是Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可遗址,因此不建议使用。systemPath元素可以引用环境变量,如:

<dependency>
  <groupId>javax.sql</groupId>
  <artifactId>jdbc-stdext</artifactId>
  <version>2.0</version>
  <scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>

二、依赖范围与classpath的关系

依赖范围(scope) 对于编译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仓库之外的类库文件

【Maven】Maven之scope依赖范围的更多相关文章

  1. maven中import scope依赖方式解决单继承问题的理解

    在maven多模块项目中,为了保持模块间依赖的统一,常规做法是在parent model中,使用dependencyManagement预定义所有模块需要用到的dependency(依赖) <d ...

  2. Maven的scope依赖作用域说明

    Maven的scope依赖作用域说明 1.test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖 2.compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去 3.provid ...

  3. maven的中传递依赖,maven的依赖管理(转)

    在maven的pom文件中 <dependencies> <dependency> <groupId>junit</groupId> <artif ...

  4. Maven核心概念之依赖,聚合与继承

    一.依赖 我们项目中依赖的jar包可以通过依赖的方式(dependencies元素下添加dependency子元素)引入. <dependency> <groupId>juni ...

  5. Maven之——坐标和依赖(上)

    Maven之--坐标和依赖(上) 1.    Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到详细的构件.Maven的坐标元素包含groupId.artifactId.versi ...

  6. 【Maven】---坐标与依赖

    Maven坐标与依赖 最近想深度学习下maven,找到一本书叫<Maven实战>,这本书讲的确实很好,唯一遗憾的是当时maven教学版本是3.0.0的,而目前已经到了3.5.4了,版本存在 ...

  7. 用Maven快速生成带有依赖的可执行jar包

    一.背景 最近项目在做微服务的拆分,那么我们想让我们的容器启动更加的轻量级,所以我们选择放弃tomcat等容器,而是通过maven生成带有指定依赖的可执行jar包的方式进行处理,本文我将分享如何通过m ...

  8. MAVEN中的Scope

    Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用6个值: *im ...

  9. Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包

    一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mv ...

随机推荐

  1. FFT学习

    看了一天的多项式的内容,看博客的时候好像还是那么回事,一看题,哇塞,发现我其实连卷积是啥都没看懂. qtdydb,背板子. 不知道卷积是啥就很伤了. P3803 [模板]多项式乘法(FFT) #inc ...

  2. spark基础知识四

    围绕spark的其他特性和应用.主要包括以下几个方面 spark自定义分区 spark中的共享变量 spark程序的序列化问题 spark中的application/job/stage/task之间的 ...

  3. Spring Boot 知识笔记(整合Mybatis)

    一.pom.xml中添加相关依赖 <!-- 引入starter--> <dependency> <groupId>org.mybatis.spring.boot&l ...

  4. vb.net 以读文本文件的方式对XML文件进行遍历

    '    对XML文件按照文本文件的方式进行遍历 Private Sub checkFile_establishEntity(strFile As String) Dim reader AsTextR ...

  5. Rattle

    Rattle使用RGtk2 包提供的Gnome图形用户界面,可以在WINDOWS,MAC OS/X,Linux等多个系统中使用. Rattle基于大量的R包:RGtk2, pmml, colorspa ...

  6. Java查询MySQL数据库指定数据库中所有表名、字段名、字段类型、字段长度、字段描述

    1,查询方法 public static List<Map<String, String>> getColumnInfoByTableName(String databaseN ...

  7. [Gamma阶段]展示博客

    水哥牛X团队[Gamma阶段]展示博客 微信小程序搜索"小小易校园"即可体验 项目愿景 想参加竞赛,锻炼自己,却找不到合适的队友 想进行实习,体验工作,每天不得不翻遍吐槽版的几百条 ...

  8. 【2019年05月21日】A股ROE最高排名

    个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名. 兰州民百(SH600738) - 滚动ROE:86.45% - 滚 ...

  9. Shell脚本之二 变量、字符串和数组

    一.Shell 变量 1.1 定义变量 定义变量时,变量名不加美元符号($),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的 ...

  10. kafka作为elk缓存使用

    ELK集群在大规模的日志收集中面临着数据量大,收集不及时,或宕机的风险,可以选择单节点的redis,但是相比redis,kafka集群高可用的特性,更优,下面来配置kafka集群配置elk作为缓存的方 ...