Maven依赖管理【后端 2】

news2024/9/21 10:52:25

Maven依赖管理详解

请添加图片描述

在Java项目开发中,依赖管理是一个至关重要的环节。Maven作为Java世界中最流行的项目管理工具之一,通过其强大的依赖管理机制,极大地简化了项目构建和依赖管理的复杂性。本文将详细介绍Maven的依赖配置、依赖传递以及依赖范围等核心概念。

4.1 依赖配置

依赖定义

依赖是指当前项目运行所需要的jar包。在Maven项目中,我们通过在pom.xml文件中定义依赖的坐标来引入所需的jar包。坐标由groupIdartifactIdversion三个元素组成,它们共同唯一标识了一个Maven项目或依赖。

示例

以下是一个在pom.xml中引入logback和junit依赖的示例:

<dependencies>  
    <!-- logback依赖 -->  
    <dependency>  
        <groupId>ch.qos.logback</groupId>  
        <artifactId>logback-classic</artifactId>  
        <version>1.2.11</version>  
    </dependency>  
    <!-- junit依赖 -->  
    <dependency>  
        <groupId>junit</groupId>  
        <artifactId>junit</artifactId>  
        <version>4.12</version>  
    </dependency>  
</dependencies>

刷新依赖

在添加或修改依赖后,需要点击IDE中的刷新按钮,以确保Maven能够识别并下载最新的依赖。如果依赖在本地仓库中不存在,Maven会尝试从远程仓库(如中央仓库)下载。

4.2 依赖传递

依赖传递性

Maven的依赖具有传递性。这意味着,如果项目A依赖于项目B,而项目B又依赖于项目C,那么项目A将自动继承项目B对项目C的依赖。这种机制极大地简化了依赖管理,避免了手动添加大量间接依赖的繁琐。

排除依赖

尽管依赖传递性带来了便利,但在某些情况下,我们可能不希望传递某些依赖。这时,可以使用<exclusions>标签来排除特定的依赖。

<dependency>  
    <groupId>com.itheima</groupId>  
    <artifactId>maven-projectB</artifactId>  
    <version>1.0-SNAPSHOT</version>  
    <exclusions>  
        <exclusion>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
        </exclusion>  
    </exclusions>  
</dependency>

4.3 依赖范围

依赖范围定义

默认情况下,Maven中的依赖可以在项目的任何地方使用。然而,通过<scope>标签,我们可以限制依赖的作用范围,以控制其在不同环境下的可用性。

依赖范围类型

  • compile(默认):适用于主程序和测试程序,且会被打包进最终的发布包中。
  • test:仅适用于测试程序,不会被打包进最终的发布包中。
  • provided:适用于主程序和测试程序,但假设在运行时将由JDK或容器提供,因此不会被打包进最终的发布包中。
  • runtime:适用于主程序,但在编译时不需要,仅在运行时需要。它会被打包进最终的发布包中。

示例

<dependency>  
    <groupId>junit</groupId>  
    <artifactId>junit</artifactId>  
    <version>4.12</version>  
    <scope>test</scope>  
</dependency>

在这个例子中,junit依赖被限制在测试范围内,这意味着它只能在测试代码中使用,并且不会被包含在最终的发布包中。

总结

Maven的依赖管理机制极大地简化了Java项目的构建和依赖管理过程。通过合理的依赖配置、利用依赖传递性和排除不必要的依赖,以及设置合适的依赖范围,我们可以构建出更加高效、可维护的项目。希望本文能够帮助你更好地理解和使用Maven的依赖管理功能。

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

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

相关文章

QT生成.exe文件无法在未安装QT的电脑上运行的解决办法

在没有安装qt的电脑上运行qt生成的exe文件&#xff0c;提示&#xff1a; The application failed to start because no Qt platform plugin could be initialized 在网上找了很多办法&#xff0c;我尝试了 手动&#xff1a; 1、修改环境变量&#xff0c;2&#xff0c;添加pla…

Hadoop未授权访问漏洞

Hadoop是一个由Apache基金会所开发的分布式系统基础架构&#xff0c;由于服务器直接在开放了Hadoop 机器 HDFS 的 50070 web 端口及部分默认服务端口&#xff0c;黑客可以通过命令行操作多个目录下的数据&#xff0c;如进行删除&#xff0c;下载&#xff0c;目录浏览甚至命令执…

【密码学】网络攻击类型:窃听攻击、假冒攻击、欺骗攻击和重放攻击

一、窃听攻击、假冒攻击、欺骗攻击和重放攻击的定义 这些攻击从名字中就大概能知道他们的攻击原理&#xff0c;我就不赘述了&#xff0c;直接用一个表格来一次性介绍四种攻击方式。 攻击类型攻击原理窃听攻击攻击者监听网络中的数据传输以获取敏感信息。示例&#xff1a;在未加…

docker 部署 mysql8

命令 docker run --restartalways --name mysql8 -v /data/mysql/conf:/etc/mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/log:/var/log -v /data/mysql/mysql-files:/var/lib/mysql-files -p 3308:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:8 \解释 --rest…

基于单片机的瓦斯浓度检测报警装置的设计与仿真

摘 要: 针 对 煤矿 安全 生产 实际 &#xff0c; 文章首先 介绍 了采用 单 片 机 的煤矿 瓦斯 浓 度检 测 报 警 装 置的整 体 构 架 &#xff0c; 然 后 对 煤矿 瓦斯 浓 度检 测 报 警 装 置 的 各 个 部 分 硬 件 进 行 了 详细 的设计&#xff0c; 给 出了煤矿瓦斯浓 度检…

JavaEE-多线程编程定时器(多线程完结篇)

定时器就是闹钟的效果&#xff0c;指定要一个任务&#xff08;runnable&#xff09;&#xff0c;指定一个时间&#xff0c;此时这个任务不会立马去执行&#xff0c;而是时间到了才会去执行&#xff0c;这个过程称为——定时执行/延时执行。 日常开发中定时执行是一个非常重要的…

Ubuntu 22.04.4LTS 安装 Docker

更新Ubuntu: sudo apt-get update添加Docker库信息&#xff1a; sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release运行下列命令添加Docker官方GPG密钥&#xff1a; sudo curl -fsSL https://mirrors.ustc.edu.cn/d…

Mybatis的基础配置解读,并简单实现增删改查

首先&#xff0c;在了解mybatis的内容之前&#xff0c;我们先学习了解一下mybatis的主配置文件&#xff0c;主配置文件&#xff08;Mybatis-config.xml&#xff09;是我们构建SqlSessionFactory的依据。作为Mybatis的核心内容&#xff0c;其内部标签的顺序&#xff0c;一系列配…

谷粒商城实战笔记-140-商城业务-nginx-搭建域名访问环境二(负载均衡到网关)

文章目录 一&#xff0c;通过域名访问商城架构设计1&#xff0c;为什么nginx要将请求转发给网关2&#xff0c;架构设计 二&#xff0c;配置1&#xff0c;nginx配置1.1 nginx.conf1.2 gulimall.conf1.3 配置原理 2&#xff0c;网关配置 三&#xff0c;记录2个问题1&#xff0c;网…

qt的项目结构

目录 创建新的项目 第一个hell0程序&#xff0c;qt的项目结构 main函数 Widget头文件: pro文件 命名规范 QtCreator 常用快捷键 Qt里边绝大部分的类都是继承自QObject是一个顶层类 父子关系 Qt坐标系 QT常用API函数 对象树 信号和槽机制 自定义信号和槽 自定义信号…

PHP企业培训考试系统小程序源码

&#x1f680;企业培训考试系统&#xff0c;赋能员工成长新引擎&#x1f4da; &#x1f331; 开篇&#xff1a;解锁企业培训新篇章 在快速变化的商业环境中&#xff0c;员工的能力提升是企业持续发展的关键。&#x1f680; 传统的培训方式已难以满足现代企业的需求&#xff0…

CentOS7.9误删了yum,怎么办?

起因是这样的,有人不小心将CentOS7.9的yum插件给删除了,导致了yum命令不能用了。 据他说是执行了这句命令之后,导致的问题。 pm -qa |grep yum | xargs rpm -e --nodeps解决办法 本方法只针对:CentOS Linux release 7.9.2009 (Core)版本生效,其他版本可以参考: https://vau…

Studying-代码随想录训练营day62| Floyd 算法精讲、A*算法精讲(A star算法)、最短路算法总结篇、图论总结

第62天&#xff0c;完结撒花*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#xff0c;最后的两个算法学习&#xff0c;编程语言C 目录 Floyd 算法精讲 A*算法精讲&#xff08;A star算法&#xff09; A*算法 复杂度分析 A*算法的缺点 最短路算法总结篇 图论总结…

log4j2: CVE-2021-44228[RCE]

漏洞概述 CVE-2021-44228为Apache Log4j2漏洞&#xff0c;被称为"Log4Shell"。攻击者将恶意代码与服务器进行交互&#xff0c;使服务器日志组件将其记录并执行&#xff0c;从而造就RCE远程代码执行漏洞。 漏洞原理 日志记录机制&#xff1a;Log4j2是一个日志记录工…

【ML】自监督学习 self-supervised Learning

【ML】 自监督学习 1. 自监督学习 bert 为例子1.1 BERT 的特点&#xff1a;1.2 BERT 的模型结构&#xff1a;1.3 训练 BERT 的步骤&#xff1a; 2. how to use BERT![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f8cccb378f844923a057043fadb60758.png)2. multi-lin…

DL00765-光伏故障检测高分辨率无人机热红外图像细粒度含数据集4000+张

光伏发电作为清洁能源的重要组成部分&#xff0c;近年来得到了广泛应用。然而&#xff0c;随着光伏电站规模的扩大&#xff0c;光伏组件在运行过程中可能会出现各种故障&#xff0c;如热斑、遮挡、接线盒故障等。这些故障不仅会影响光伏电站的发电效率&#xff0c;还可能导致更…

【日常开发】 java返回ECharts数据结构封装

java返回ECharts数据结构封装 一、前端页面示例图如下&#xff1a; 二、准备测试数据&#xff1a; 三、后端 格式封装代码&#xff1a; 四、最终结果&#xff1a; &#x1f388;边走、边悟&#x1f388;迟早会好 一、前端页面示例图如下&#xff1a; 二、准备测试数据&am…

4.11.seq2seq 序列到序列学习

序列到序列学习(seq2seq) ​ 使用两个循环神经网络的编码器和解码器&#xff0c;应用于序列到薛烈类的学习任务。 ​ ​ 在图中&#xff0c;特定的"<eos>"表示序列结束词元。一旦输出序列生成此词元&#xff0c;模型就会停止预测。在循环神经网络解码器的初…

Go语言中gin+gorm开发前端端分离博客时遇到的问题,gorm执行查询时如何选中特定字段?

代码获取 本篇文章的代码放在了Github上&#xff0c;可以免费获取。 https://github.com/zhangdapeng520/zdpgo_gin_examples 概述 在查询用户信息的时候&#xff0c;由于密码这个字段比较敏感&#xff0c;需要进行处理&#xff0c;不要返回给前端。 我一开始的解决方案是直…

统计学:条件概率模型

照片由Edge2Edge Media在Unsplash上拍摄 一、介绍 在概率的许多应用中&#xff0c;不可能直接观察实验的结果&#xff1b;而是观察与结果相关的事件。因此&#xff0c;条件概率模型对于考虑和利用从观察到的事件中获得的信息至关重要。此外&#xff0c;条件概率模型与贝叶斯定理…