【Maven】Maven之scope依赖范围

一、理解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仓库之外的类库文件

原文地址:https://www.cnblogs.com/756623607-zhang/p/11373916.html

时间: 2024-08-05 21:00:40

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

7.maven配置文件中&lt;scope&gt;的6种配置属性解释(源自官方文档) -- 依赖的范围

7.maven配置文件中<scope>的6中配置属性解释 说明:我们知道在pom.xml中<scope>标签是设置依赖作用域的,那么具体的设置类型有哪几种,分别作用的什么时候呢? Dependency Scope Dependency scope is used to limit the transitivity of a dependency, and also to affect the classpath used for various build tasks. There

maven(5)坐标和依赖

[0]README 1)本文部分文字转自 "maven实战",旨在 review  "maven(5)坐标和依赖" 的相关知识: [2]坐标详解  1)intro:坐标用于定位 类库,而一组maven 坐标通过一些元素来进行定义的:groupId, artifactId,version, packaging, classifier: 对以上元素的分析(Analysis): A1)groupId:定义当前 maven 项目隶属的实际项目:maven 项目和 实际项目不

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

Maven之--坐标和依赖(上) 1.    Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到详细的构件.Maven的坐标元素包含groupId.artifactId.versiion.packaging.classifier.Maven内置了一个中央仓库地址.须要时Maven会依据坐标到当中下载.详细关于中央仓库的介绍在后面. 2.    Maven坐标具体解释 比方以下一组坐标: <groupId>org.andy.items</groupId> <

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

一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mvn clean compile 时出错如下: 原因是在eclipse中添加了 exteneral jar后,还需要在maven中再添加依赖的jar包 Maven手动添加第三方依赖包有两种方法: 参考:maven 添加第三方依赖              maven中把依赖的JAR包一起打包 第一种方法是使

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

宏观图 一.依赖 我们项目中依赖的jar包可以通过依赖的方式(dependencies元素下添加dependency子元素)引入. <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> 1.依赖范围 通过控制依赖的范围,可以指定该依赖在什么阶段有效. &

maven如何引入本地依赖

今天遇到一个问题,要做一个语音识别接口的对接,想先跑一下对方给的demo,但是发现使用了maven却没有在pom里添加依赖,不知道他那边是怎么运行的.于是想到要在pom中添加本地依赖,结果真的可以: System Dependencies Dependencies with the scope system are always available and are not looked up in repository. They are usually used to tell Maven a

【Maven】---坐标与依赖

Maven坐标与依赖 最近想深度学习下maven,找到一本书叫<Maven实战>,这本书讲的确实很好,唯一遗憾的是当时maven教学版本是3.0.0的,而目前已经到了3.5.4了,版本存在差距, 没关系,如果有时间和精力我也会阅读官方文档,看看到底有哪些变换. 一.坐标详解 1.何为Maven坐标 maven定义了这样一组规则:世界上任何一个构件都可以使用maven坐标唯一标识,坐标元素包括:groupId.artifactId.version.packaging.classifier.只要提

如何在Maven中配置Spring依赖

如何在Maven中配置Spring依赖 *前言: 这篇文章讨论了如何在Maven配置Spring的一些细节,这里介绍了一些主要的Maven依赖管理内容,当然还存在一些没有讨论到的内容,不过这篇文章应该是在项目中使用Spring的一个好的起点.最新的Spring发布版可以在Maven仓库中找到.* 在Maven中Spring的基础配置 Spring是高度模块化的,可以单独使用Spring的某个库而不需要依赖Spring的其他库.比如,使用Spring Context库不需要依赖Spring Per

springMvc + Maven 项目提示 hessian 依赖包 无法下载;

首先 从 https://github.com/alibaba/dubbo/archive/master.zip 下载最新的 dubbo 源码包到本地某个目录, 解压出来: cmd 进入该目录: 执行: mvn clean install –Dmaven.test.skip 下载所需的 jar 包,这时也会下载 本地存放仓库的 D:\用户\Administrator\.m2…下 再进入 web 项目: 执行 mvn clean install 成功执行; springMvc + Maven 项目