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…

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…

unity中GameObject介绍

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

JVM参数选项类型

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

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

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

Android View的事件分发机制

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

K8S配置storage-class

简介 Kubernetes支持NFS存储,需要安装nfs-subdir-external-provisioner,它是一个存储资源自动调配器,它可将现有的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 &…

面向对象与设计模式第一节:深入理解OOP

第三章:面向对象与设计模式 第一节:深入理解OOP 面向对象编程(OOP)是一种编程范式,它将程序结构视为由对象组成,促进了代码的重用性和可维护性。在这一课中,我们将深入分析OOP的四个基本特性&…

[JAVAEE] 多线程的案例(三) - 线程池

目录 一. 什么是线程池 二. 线程池的作用 三. java提供的线程池类 四. ThreadPoolExecutor的构造方法及参数理解 1. int corePoolSize: 核心线程数. 2. int maximumPoolSize: 最大线程数 核心线程数 非核心线程数 3. int keepAliveTime:非核心线程允许空闲的最大时间. …

DataX简介及使用

目录 一、DataX离线同步工具DataX3.0介绍 1.1、 DataX 3.0概览 1.2、特征 1.3、DataX3.0框架设计 1.4、支持的数据元 1.5、DataX3.0核心架构 1.6、DataX 3.0六大核心优势 1.6.1、可靠的数据质量监控 1.6.2、丰富的数据转换功能 1.6.3、精准的速度控制 1.6.4、强劲的…

正则表达式和通配符

文章目录 正则表达式和通配符的区别正则表达式(Regex)通配符(Wildcards)总结 正则表达式的概念正则表达式的由来为什么要使用正则表达式 正则表达式的语法组成修饰符元字符\f\b\B 在Linux中的基础正则和扩展正则基础正则(BRE)^$.*…

面试时被问到“Scaling Law”,该怎么答?

在大模型的研发中,通常会有下面一些需求: 计划训练一个 10B 的模型,想知道至少需要多大的数据? 收集到了 1T 的数据,想知道能训练一个多大的模型? 老板准备 1 个月后开发布会,给的资源是 100 …

Linux安装Nginx教程(rpm安装方式)

本章教程,主要介绍如何在Linux Centos7系统上,使用rpm的方式进行安装Nginx。 一、安装wget插件 如果不存在wget下载插件,需要安装一下。 yum install -y wget二 、下载rpm安装包 官方提供的rpm下载地址:https://nginx.org/packages/centos/7/x86_64/RPMS/ <

【Nginx系列】499错误

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…