Maven的依赖

一、依赖的基本配置

根元素project下的dependencies可以包含多个 dependence元素,以声明多个依赖。每个依赖都应

该包含以下元素:

1. groupId, artifactId, version :

依赖的基本坐标, 对于任何个依赖来说,基本坐标是最重要的,

Maven根据坐标才能找到需要的依赖。

2. Type

依赖的类型,部分情况下不需要声明。 默认值为jar

3. Scope: 依赖范围(compile,test,provided,runtime,system
  • compile: 编译依赖范围。

如果没有指定,就会默认使该依赖范围。使此依赖范围的Maven依赖,对于编译、测

试、运三种classpath都有效。

  • test: 测试依赖范围。

使此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运的使

时将法使此类依赖。典型的例就是JUnit,它只有在编译测试代码及运测试的时候

才需要。

  • provided: 已提供依赖范围。

使此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运效。典型的例

servlet-api,编译和测试项的时候需要该依赖,但在运的时候,由于容器已经

提供,就不需要Maven重复地引⼊⼀(如:servlet-api)

  • runtime: 时依赖范围。

使此依赖范围的Maven依赖,对于测试和运⾏classpath有效,但在编译主代码时效。典

型的例JDBC驱动实现,项主代码的编译只需要JDK提供的JDBC,只有在执测试

或者运的时候才需要实现上述接的具体JDBC驱动。

  • system: 系统依赖范围。

该依赖与三种classpath的关系,和provided依赖范围完全致。但是,使⽤system范围依

赖时必须通过systemPath元素显式地指定依赖件的路径。由于此类依赖不是通过Maven

库解析的,且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使

4. Optional:

标记依赖是否可选

5. Exclusions

来排除传递性依赖。

二、 依赖范围

先需要知道,Maven在编译项主代码的时候需要使⽤⼀classpath

如:编译项代码的时 候需要⽤spring-core,件以依赖的式被引classpath中。 其次, Maven在执测试的时候 会使⽤另外classpath。 如:junit。 最后在实际运⾏时,会使⽤⼀classpath, spring-core需要在该classpath中,⽽junit不需要。

那么依赖范围就是来控制依赖与这三种classpath(编译classpath,测试classpath,运

classpath)的关系, Maven有以下种依赖范围:

1. Compile 编译依赖范围:

如果没有指定,就会默认使该依赖范围。 使此依赖范围的Maven

赖, 对于编译,测试,运都有效。

2. Test

测试依赖范围。 只在测试的时候需要。junit

3. Provided

已提供依赖范围。 使此依赖范围的Maven依赖,对于编译和测试有效, 但在运

效。 典型的例servlet-API, 编译和测试项的需要, 但在运时, 由于容器已经提

供, 就不需要Maven重复地引⼊⼀遍。

4. Runtime

时依赖范围。 使此依赖范围的Maven依赖,对于测试和运⾏有效, 但在编译代

码时效。 典型的例是:jdbc驱动程序, 项主代码的编译只需要jdk提供的jdbc,只有在

测试或者运的时候才需要实现上述接的具体jdbc驱动。

5. System

系统依赖范围。 般不使

三、传递性依赖

让我们在使某个jar的时候就不去考虑它依赖了什么。也不多余的依赖。

Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引到当前项

中。

注意: 传递依赖有可能产冲突!!

冲突场景:

如果A下同时存在两个不同versionC,冲突!!(选取同时适合AB的版本)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GIT】Visual Studio 中 Git 界面中, 重置 和 还原

在 Visual Studio 的 Git 界面中,“重置” 和 “还原” 是两个常用的 Git 操作。它们的主要区别在于应用场景和影响范围。 1. 重置(Reset) 重置用于更改当前分支的提交历史,通常用于撤销或删除某些提交。重置操作可能会更改 Git…

python网络爬虫基础:URL的组成与结构

URL(Uniform Resource Locator,统一资源定位符),常被称为网页链接、网址,用于在互联网中唯一标识资源的位置。一个典型的 URL 包含以下几部分: 1. 协议(Protocol) 协议指定了访问资…

Flink CDC系列之:调研应用Flink CDC将 ELT 从 MySQL 流式传输到 StarRocks方案

Flink CDC系列之:调研应用Flink CDC将 ELT 从 MySQL 流式传输到 StarRocks方案 准备准备 Flink Standalone 集群准备 docker compose为 MySQL 准备记录使用 Flink CDC CLI 提交作业 同步架构和数据更改路由变更清理 本教程将展示如何使用 Flink CDC 快速构建从 MySQ…

[Ansible实践笔记]自动化运维工具Ansible(二):Ansible的playbook及角色

Ansible playbook(剧本) 详情请参考[Ansible实践笔记]自动化运维工具Ansible(一):初探ansible&ansible的点对点模式 文章目录 Ansible playbook(剧本)介绍核心字段环境配置案例&#xff1…

React--》掌握Valtio让状态管理变得轻松优雅

Valtio采用了代理模式,使状态管理变得更加直观和易于使用,同时能够与React等框架无缝集成,本文将深入探讨Valtio的核心概念、使用场景以及其在提升应用性能中的重要作用,帮助你掌握这一强大工具,从而提升开发效率和用户…

【Go语言】

type关键字的用法 定义结构体定义接口定义类型别名类型定义类型判断 别名实际上是为了更好地理解代码/ 这里要分点进行记录 使用传值的例子,当两个类型不一样需要进行类型转换 type Myint int // 自定义类型,基于已有的类型自定义一个类型type Myin…

用kali入侵 DarkHole_2测试

进入kali系统调出root交互式界面 netdiscover -r 000.000.000.000/24 -------局域网探测IP工具 nmap 设备端口扫描 发现两个攻击点一个是80端口的Http 一个是22端口的ssh 发现有许多GIT文件 可能会出现git源码泄露 使用githack URL 命令还原git源文件 打开面板控制命令行 输入…

2.插入排序(斗地主起牌)

一、思想 扑克牌起牌 代码: 二、时间复杂度: 最好情况(已经排序好的):T O(N) 最坏情况(完全逆序):T O(N^2) 三、优劣: 严格的大小比较之后才进行错位插入&#x…

exchange_proxy exchange 安全代理

1. 软件简介 exchange_proxy 是由小米公司开发并开源的,以 go 语言开发的 exchange 安全代理,可以将内网的 exchange 服务器的 https 服务安全地发布出去, 支持的功能如下: WEB 端增加 OTP 二次认证手机端增加设备激活绑定的功能屏蔽了 PC 端的 EWS 协议(意思就是不支持)…

gin入门教程(5):请求参数处理

在 Gin 中,处理请求参数非常简单。您可以从 URL 路由、查询字符串和请求体中提取参数。以下是几种常见的处理方式: 1. URL 路由参数 如果您想从 URL 中获取参数,可以使用路由定义中的冒号(:)符号: r.GET…

【PHP】在ThinkPHP6中Swoole与FPM的简单性能测试对比

一、前言 本文主要测试在ThinkPHP 6框架中,使用Swoole扩展库与使用PHP-FPM两者的HTTP并发性能差距,测试方法较简单,仅供参考。 二、测试环境 系统:Ubuntu 22.04 PHP版本:7.4.33 Swoole版本:4.8.13 ThinkPHP版本:6.1.5 ThinkPHP-Swoole扩展库版本:3.1.4 测试工具:A…

unity中GameObject介绍

在 Unity 中,Cube和Sphere等基本几何体是 Unity 引擎的内置预制体(Prefabs),它们属于 Unity 中的GameObject 系统,可以在 Unity 的 Hierarchy 视图或 Scene 视图中右键点击,然后在弹出的菜单中选择 3D Obje…

MySQLDBA修炼之道-开发篇(一)

三、开发基础 1. 数据模型 1.1 关系数据模型介绍 关于NULL 如果某个字段的值是未知的或未定义的&#xff0c;数据库会提供一个特殊的值NULL来表示。NULL值很特殊&#xff0c;在关系数据库中应该小心处理。例如查询语句“select*from employee where 绩效得分<85 or>绩…

ElasticSearch的向量存储和搜索

ElasticSearch的向量存储和搜索 引入依赖示例代码 引入依赖 <?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:schema…

JVM参数选项类型

我的后端学习大纲 JVM学习大纲 1、类型1&#xff1a;标准参数选项&#xff1a; 1.1.特点&#xff1a; 1.比较稳定&#xff0c;后续基本不会发生变化2.以“-”开头 1.2.各种选项&#xff1a; 运行java或者java -help可以看到所有的标准选项 1.3.补充内容&#xff1a; -se…

Halcon 多相机统一坐标系(标定)

多相机统一坐标系是指将多个不同位置的相机的图像采集到同一个坐标系下进行处理和分析的方法。 在计算机视觉和机器视觉领域中&#xff0c;多相机统一坐标系被广泛应用于三维重建、立体视觉、目标跟踪等任务中。 以gen_binocular_rectification_map&#xff08;生成描述图像映…

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (七):MongoDB的设置

本项目旨在学习如何快速使用 nodejs 开发后端api&#xff0c;并为以后开展其他项目的开启提供简易的后端模版。&#xff08;非后端工程师&#xff09; 由于文档是代码写完之后&#xff0c;为了记录项目中需要注意的技术点&#xff0c;因此文档的叙述方式并非开发顺序&#xff0…

Android View的事件分发机制

前言 本文由于介绍本人关于View的事件分发机制的学习&#xff0c;如有不恰当的描述欢迎指出。 View基础 什么是View ​ View是Android中所有控件的基类&#xff0c;不管是Button、TextView、LinearLayout&#xff0c;它们的共同基类都是View。也就是说&#xff0c;View是界…

K8S配置storage-class

简介 Kubernetes支持NFS存储&#xff0c;需要安装nfs-subdir-external-provisioner&#xff0c;它是一个存储资源自动调配器&#xff0c;它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展&#xff0…

腾讯云跨AZ部署FortigateHA备忘录

随时保存配置 config system globalset admintimeout 480set alias "FortiGate-VM64-KVM"set gui-auto-upgrade-setup-warning disableset hostname "FG-Slave"set revision-backup-on-logout enableset revision-image-auto-backup enableset timezone &…