学习maven(添加依赖坐标,maven的常用命令,依赖传递,解决依赖冲突)

目录

前言

添加依赖坐标

maven 的常用命令

如下图所示:重点是标红的

如何使用这些maven的常用命令呢?

实例

maven常用的命令可以在IDEA中有自带插件来完成

 打开IDEA的命令行终端

依赖传递

什么是依赖传递呢?

解决依赖冲突问题

什么是依赖冲突问题?

解决依赖冲突

问题


前言

本篇博客的重点

  • 学会从maven中央仓库中下载jar 包,或复制 依赖坐标
  • 学会使用 maven常用命令
  • 理解依赖传递和处理如何解决冲突问题

添加依赖坐标

之前,我们需要的jar包,都是从别人的网盘中获取,或从对应的官网中下载现在我提供一个maven 中央仓库的网址。

作用:是帮助我们快速找到我们需要的jar包 或添加的依赖

网址:https://mvnrepository.com/

当你将这个网址复制到浏览器,访问后,首先会出现一个判断你是否为人机的界面

你的操作是,在一个验证是否为人机的框中 选中即可。等待下一步跳转到主界面

如下图所示:

操作步骤

1 打开官网主界面

2 搜索框中搜索我们需要的jar包名字

我现在假设我需要一个servlet jar包。

我的操作是:从搜索框中搜索jar包的名字

3 找到点击量最高的那个,点击你需要的jar包名字

3.1 点击你需要的jar包名字

3.2 选择合适的版本【一般选择使用量最高的那个】

  • 点击版本号到下一步

4选择构建方式【一般是选择maven 构建的】

  • 选择好合适的版本后,看你选择的方式:下载jar包/ 添加依赖坐标

4.1根据自己的需求,选择 下载jar包,还是在向pom文件中添加依赖坐标

  • 点击下载jar包:出现一个下载jar的,等待下载
  • 点击我框中的依赖,就已经复制好了,就到我们的通过maven 构建的项目 的pom文件中添加这些依赖坐标。

本次博客中,我重点讲的是如何在pom文件中添加你需要用的依赖坐标、

从上面将,我们的需要的依赖坐标,也从maven中央仓库中找到了,现在我们就将依赖复制到pom文件中,但我们应该放到哪一个位置呢?

我们是使用 这个标签<dependencies> </dependencies> 将我们复制的内容包起来,之后再刷新一下,等待从中央仓库下载到你的本地仓库中去

maven 的常用命令

如下图所示:重点是标红的

mvn clean:调用clean生命周期的clean阶段,清理上一次构建项目生成的文件;
mvn compile :编译src/main/java中的java代码;
mvn test :编译并运行了test中内容 ;
mvn package:将项目打包成可发布的文件,如jar或者war包; 
mvn install :发布项目到本地仓库 ;

如何使用这些maven的常用命令呢?

实例

题目:我需要把当前web项目 打包成war 包

注意:我们是根据项目类型,选择打包方式:

  1. 如果你是Java项目自动 打包成jar 包
  2. 如果你是 web项目自动打包成 war包

这里有两种方式实现

  • IDEA自带的插件来完成
  • 打开终端来完成
maven常用的命令可以在IDEA中有自带插件来完成

步骤

1 打开IDEA 在maven 构建的项目中可以看到右边的maven 标志, 点击找到 maven的生命周期 ,点击就可以看到

2 鼠标点击右上角maven的生命周期 找到package ,点击它,就执行这个任务

你需要哪一个就点击哪一个,你点击这个插件本质和在终端使用 mvn package  是一样的

 打开IDEA的命令行终端

通过输入命令的方式,根据项目类型打包成 jar包/war包

输入命令: mvn package

成功的标志是

依赖传递

什么是依赖传递呢?

举一个例子:创建一个项目A 我引入两个给依赖 B jar包, C jar 包 ,其中依赖B,C 内部均依赖了 D ja包

那么我可以说:项目A直接依赖B,C 间接依赖 D。这就是所谓的 “ 依赖传递”

解决依赖冲突问题

什么是依赖冲突问题?

就上面我举得例子,引入的两个jar 包  内部都使用 D jar 包,但使用D jar包的版本 却都不相同。

那应该选择哪一个版本的Djar包?这就是依赖冲突问题。

IDEA 面对这个问题,有可能会报错

解决依赖冲突

有三种办法

1 使用maven提供的依赖调解原则 (自动)

第一种方式,不用我们修改什么,我们通过maven 构建的项目会自动修复,舍弃其中一个。

根据以下两个舍弃原则:

1.1 依赖传递jar包,第一声明者优先原则

  • 在pom.xml文件中,先声明哪个jar包,就以那个jar包为主

1.2 路径近者优先原则

  • 优先使用我们自己导入的jar包 ,依赖中传递的jar包排其次

注意:直接依赖高于间接依赖

2 排除依赖,排除依赖的jar包

操作:通过  <exclusions>   <exclusions> 你要排除的依赖 </exclusions>  </exclusions> 将要舍弃的jar包的<groupId> 和 <artifactId> 包起来

实例

 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.4.RELEASE</version><!-- 排除依赖的jar包 --><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion></exclusions></dependency>

锁定版本

操作:使用   <dependencyManagement> <dependencies>你锁定的依赖【失效】 </dependencies> </dependencyManagement>  标签 将你想要让哪一个依赖失效 包起来。

实例

 <!-- 锁定的jar包版本 --><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.0.2.RELEASE</version></dependency></dependencies></dependencyManagement><!-- 导入jar包时,不需要再设置版本 --><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency></dependencies>

问题

我现在就有一个问题:我们知道我们的tomcat内置了servlet jar包 在bin目录下,为什么我们还要引入  该jar包的依赖,这样不会导致刚刚讲的依赖冲突吗?【maven 构建的项目不知道选择哪一个】

答案在我这2024.1.1版本的IDEA中通过maven 构建的项目,即使你添加了依赖坐标在pom文件中,并且你还没有表示 依赖的范围,【一般是把范围设置为package】但这样也有很大概率不会报错的。

但是我依旧希望,如果你是在pom文件中,引入servlet jar包的依赖坐标,可以给这个依赖添加依赖范围【一般是把范围设置为package】

原因是:

1 maven构建项目中,即使你没有给这个依赖添加依赖范围,他会默认为 依赖范围是在编译阶段有效,因此当你把项目部署tomcat 服务器,后你添加的依赖不再起作用,因此不会产生依赖冲突

2 根据使用maven提供的依赖调解原则 (自动) :第一声明的优先,首先肯定是tomcat 自己的提供的servlet依赖 ,其次才是我们在pom文件中添加的,

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

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

相关文章

远程控制电脑技术让我们的生活更加简化

在忙碌的现代生活节奏下&#xff0c;远程控制电脑技术已经成为我们生活中不可或缺的一部分。无论是在家办公&#xff0c;还是在旅途中需要紧急处理工作&#xff0c;远程控制电脑都能为我们提供极大的便利。今天&#xff0c;我们就来聊聊远程控制电脑技术是如何简化我们的生活&a…

【MySQL数据库】Ubuntu下的mysql

目录 1&#xff0c;安装mysql数据库 2&#xff0c;mysql默认安装路径 3&#xff0c;my.cnf配置文件 4&#xff0c;mysql运用的相关指令及说明 5&#xff0c;数据库、表的备份和恢复 mysql是一套给我们提供数据存取的&#xff0c;更加有利于管理数据的服务的网络程序。下面…

HarmonyOS:使用Grid构建网格

一、概述 网格布局是由“行”和“列”分割的单元格所组成&#xff0c;通过指定“项目”所在的单元格做出各种各样的布局。网格布局具有较强的页面均分能力&#xff0c;子组件占比控制能力&#xff0c;是一种重要自适应布局&#xff0c;其使用场景有九宫格图片展示、日历、计算器…

(一)强化学习基础概念及学习路径

目录 前言 一、强化学习是什么&#xff1f; 二、强化学习中的基本概念 1.状态 2.动作 3.奖励 4.策略 5.智能体 6.环境 7.智能体与环境交互 三、强化学习路径 总结 前言 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是机器学习的范式和方法论之一&a…

六西格玛DMAIC在企业得项目管理中有什么作用

六西格玛&#xff08;Six Sigma&#xff09;是一种以数据为基础的管理方法&#xff0c;旨在通过减少缺陷和变异来提高过程质量和效率。DMAIC 是六西格玛中一种常用的改进方法论&#xff0c;适用于现有过程的改进。DMAIC 代表五个阶段&#xff1a;定义&#xff08;Define&#x…

【C++】简单计算器问题的深度解析与优化对比

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;问题描述&#x1f4af;实现 1&#xff1a;我的实现代码分析优点不足 &#x1f4af;实现 2&#xff1a;老师的第一种实现代码分析优点不足 &#x1f4af;实现 3&#xff1a;…

Spire.PDF for .NET【页面设置】演示:向 PDF 文档添加页码

在 PDF 文档中添加页码不仅实用&#xff0c;而且美观&#xff0c;因为它提供了类似于专业出版材料的精美外观。无论您处理的是小说、报告还是任何其他类型的长文档的数字副本&#xff0c;添加页码都可以显著提高其可读性和实用性。在本文中&#xff0c;您将学习如何使用Spire.P…

开疆智能Ethernet/IP转Profinet网关连接纳博特控制器配置案例

该案例是西门子PLC通过开疆智能研发的Ethernet/IP转Profinet网关KJ-PNG-108连接纳博特控制器的配置案例首先下载控制器的EDS文件&#xff0c;解析出其中的ethernet参数. 将EDS文件导入解析软件&#xff0c;透过软件可以看到数据长度默认为32字节&#xff0c;连接点为150/100 打…

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的移动台账管理系统

开题报告 个人财务管理系统的意义在于提高个人财务管理的效率&#xff0c;实现财务稳定&#xff0c;增强经济安全感。收支管理是每个个人和个人组织不可缺少的工作&#xff0c;也是个人财务管理中不可或缺的研究对象。通过信息化地收集和处理收支信息&#xff0c;减少手工记录…

车牌识别OCR授权:助力国产化升级,全面提升道路监控效率

政策背景&#xff1a;国产化升级&#xff0c;推动道路监控产业转型 随着国家对信息安全的重视&#xff0c;国内各大公安、政企机构已进入全面升级国产化平台的实施阶段。根据最新的政策要求&#xff0c;公安和政府部门必须在未来三年内完成平台的国产化替换工作。这一举措不仅…

【算法】【优选算法】哈希表

目录 一、简介二、两数之和三、⾯试题 01.02.判定是否互为字符重排四、217.存在重复元素五、219.存在重复元素 II六、49.字⺟异位词分组 一、简介 哈希表就是一个使用键值对key-value来存储数据的容器。 用于快速查找某个元素O(1)时间复杂度。 应用场景&#xff1a; 频繁查找…

Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF

Latex代码中使用pdf图片&#xff0c;无法预览&#xff0c;提示&#xff1a; Please activate LaTeX Workshop sidebar item to render the thumbnail of a PDF 解决办法&#xff1a; 点击左边这个刷新下即可

uniapp结合movable-area与movable-view实现拖拽功能

前言 因为公司业务开发需要拖拽功能。 ps&#xff1a;该功能只能针对高度一致的&#xff0c;如果高度不一致需要另外二开 演示 开始 <template><view style"height: 100%;"><movable-area :style"{width: 100%, height: allHeight px}"…

访问者模式的理解和实践

在软件开发过程中&#xff0c;设计模式为我们提供了解决常见问题的最佳实践。访问者模式&#xff08;Visitor Pattern&#xff09;是行为设计模式之一&#xff0c;它将数据操作与数据结构分离&#xff0c;使得在不修改数据结构的前提下&#xff0c;能够定义作用于这些元素的新的…

MATLAB直流电机模型,直流电机控制

直流电机控制简介 直流电机&#xff08;DC motor&#xff09;广泛应用于各种机械驱动和电力控制系统中&#xff0c;其运行性能的控制至关重要。为了精准地控制直流电机的输出特性&#xff0c;可以通过不同的控制方式进行调节。常见的控制方式包括电枢电流控制、速度控制、电机位…

【工业机器视觉】基于深度学习的水表盘读数识别(2-数据采集与增强)

【工业机器视觉】基于深度学习的仪表盘识读&#xff08;1&#xff09;-CSDN博客 数据采集与增强 为了训练出适应多种表型和环境条件的模型&#xff0c;确保数据集的质量与多样性对于模型的成功至关重要。高质量的数据不仅需要准确无误、具有代表性&#xff0c;还需要涵盖尽可能…

vscode通过ssh连接远程服务器(实习心得)

一、连接ssh服务器 1.打开Visual Studio Code&#xff0c;进入拓展市场(CtrlShiftX)&#xff0c;下载拓展Remote - SSH 2. 点击远程资源管理器选项卡&#xff0c;并选择远程(隧道/SSH)类别 3. 点击ssh配置&#xff1a;输入你的账号主机ip地址 4.在弹出的选择配置文件中&#xf…

Maven(生命周期、POM、模块化、聚合、依赖管理)详解

Maven构建项目的生命周期 在Maven出现之前&#xff0c;项目构建的生命周期就已经存在&#xff0c;软件开发人员每天都在对项目进行清理&#xff0c;编译&#xff0c;测试&#xff0c;部署等工作&#xff0c;这个过程就是项目构建的生命周期。虽然大家都在不停的做构建工作&…

webstorm开发uniapp(从安装到项目运行)

1、下载uniapp插件 下载连接&#xff1a;Uniapp Tool - IntelliJ IDEs Plugin | Marketplace &#xff08;结合自己的webstorm版本下载&#xff0c;不然解析不了&#xff09; 将下载到的zip文件防在webstorm安装路径下&#xff0c;本文的地址为&#xff1a; 2、安装uniapp插…

unique_ptr自定义删除器,_Compressed_pair利用偏特化减少存储的一些设计思路

主要是利用偏特化&#xff0c; 如果自定义删除器是空类&#xff08;没有成员变量&#xff0c;可以有成员函数&#xff09;&#xff1a; _Compressed_pair会继承删除器&#xff08;删除器作为基类&#xff09;&#xff0c;但_Compressed_pair里不保存删除器对象&#xff0c;只…