【SpringBoot】深入解析 Maven 的操作与配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


Maven


1.什么是Maven?


Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包


2. 创建一个Maven项目


IDEA本身已经集成了Maven,我们可以直接使用,无需安装

以下截图的idea版本为:2022.1.4,不同版本的 idea 界面展示会有所不同

File -> New-> Project

在这里插入图片描述


Build System 选择 Maven 后,新创建的项目会多出一个 porm.xml 文件:

在这里插入图片描述


3. Maven 项目构建


点击红色框中的 Maven

在这里插入图片描述


我们可以对创建的 Maven 进行一些操作

在这里插入图片描述


编译代码自动生成 target 包

我们在运行代码时,会自动添加一个 target 包,这个包存放的是我们编译生成的代码:

在这里插入图片描述


clean

clean 操作,就是把刚刚生成的 target 包清除:

在这里插入图片描述


package

package是打包的意思,打包就是把所有的class文件,全部放在一起,打成 jar包 或者 war包

  • jar包 和 war包 都是一种压缩文件
  • jar 包就是把开发人员已经写好的一些代码进行打包,打好的 jar 包就可以引入到其他项目中,也可以直接使用这些 jar 包中的类和属性,另外也可以打成可执行 jar 包,这样的包就可以通过java -jar命令来执行
  • war包可以理解为是一个web项目,里面是项目的所有东西,通常用于网站.

在执行 package 命令时,会把上面的所有命令都执行完:

在这里插入图片描述


双击 package:

在这里插入图片描述


我们复制上面的路径,来查看打好的 jar 包

在这里插入图片描述


4. 配置镜像节点并修改porn 文件


4.1 配置内部镜像节点


根据 idea 所在文件,找到插件文件下的 maven 插件:

在这里插入图片描述


在这里插入图片描述


我们使用 vscode 打开这个文件,并下划找到 <mirror>这个镜像节点:

在这里插入图片描述

上面默认是国外的镜像,我们需要配置国内镜像,把<mirror>标签中的内容替换成下列部分,并且保存:

在这里插入图片描述

遇到上述情况,对于 windows 系统,只需要以管理员方式运行 vscode ,即可保存修改后的 setting.xml 文件;

<mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    -->
    <!-- 加入如下mirror节点 使用国内阿里云仓库镜像  开始 -->
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
        <id>central</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun central</name>
        <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
    <mirror>
        <id>spring</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun spring</name>
        <url>https://maven.aliyun.com/repository/spring</url>
    </mirror>
    <!-- 加入如下mirror节点 使用国内阿里云仓库镜像  结束-->
</mirrors>

4.2 创建 Maven 项目


在这里插入图片描述


创建好后,我们打开 porm.xml 文件,在这个文件中写入数据库厂商提供的驱动包

在这里插入图片描述


4.3 去 maven 商店下载对应的驱动包


打开 maven 商店:

Maven Repository: Search/Browse/Explore (mvnrepository.com)


在这里插入图片描述


找到要下载的 maven 选项卡:

在这里插入图片描述


4.4 修改 porm.xml 文件并加载


在 porm.xml 文件中添加依赖坐标:

在这里插入图片描述


点击刷新按钮,出现下列提示,表示成功添加依赖:

在这里插入图片描述


在这里插入图片描述


4.5 在依赖中引入本地下载的 jar 包方法


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


5. Maven Help 插件


当项目比较复杂时,我们就会有Jar包冲突的问题,这时候就需要去解决依赖冲突;解决冲突之前,要先找到冲突,我们可以使用Maven Help插件来观察包和包之间的依赖关系


安装插件

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在我们安装好 Maven helper 后,启用并重启 idea ,点开 porm.xml 文件,在下端显示分析器 Dependency Analyzer,则说明插件启用成功;

在这里插入图片描述


打开依赖分析器:

在这里插入图片描述


列表/树形式展示的视图效果:

在这里插入图片描述


6. Maven 依赖管理


上面说到,Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加 jar 包,

获取的jar包,其实就是依赖.

pom.xml 就是 maven 的配置文件,用以描述项目的各种信息


6.1 依赖配置


依赖:指当前项目运行所需要的jar包;

比如前面学习 JDBC 时,我们需要手动下载 mysql-connector-java 的包,并且添加到项目中;如果使用Maven,我们只需要在pom.xml中引入mysql-connector-java的依赖即可:


1. 在 pom 文件 dependencies 标签内,添加依赖坐标

在这里插入图片描述


依赖坐标结构如下:

在这里插入图片描述

依赖都是由上面这三部分组成的,缺一不可;


2.点击刷新按钮,引入新加入的依赖jar包

在这里插入图片描述

下列的刷新键,和上面的刷新等效:

在这里插入图片描述

后续有添加新的jar包,或者修改jar包版本,都需要通过该方式在项目中添加依赖.


3. 刷新完之后,就可以在项目中看到新加入的 jar包

在这里插入图片描述


6.2 依赖传递


早期我们没有使用 maven 时,向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下.
比如A依赖B,B依赖C,那么A项目引入B的同时,也需要引入C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的:

比如我们要吃火,需要有锅,有调料,有食材,以及确认什么样的锅,什么样的食材.

比如去医院看病,需要带上以往的病历,检查结果,处方等,并且要确认带的资料是正确的,如果日期错了,或者患者错了,带少了,就需要回去重新拿.


但使用maven的话,就可以避免管理所需依赖的关系。我们只需要在pom文件中,定义直接依赖就可以了,由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入;

比如吃火锅,现在我们可以点一个海底捞外卖,直接就把所有食材都送过来了,包括什么锅,配什么菜

比如去医院看病,借助"互联网",实现了信息共享,只需要带上身份证,以往的病历和检查结果就都可以看到了.

在这里插入图片描述

如上图,对于不同版本的 jar 包,默认生效最近距离的版本,如左右分支都有 jar C,默认先生效右分支的;

项目A通过 Maven 引入 JarA 时,会自动引入 JarBJar C

JarA项目B 就是 项目A 的直接依赖;JarBJar C是间接依赖;

直接依赖:在当前项目中通过依赖配置建立的依赖关系

间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源


我们打开依赖分析器,查看依赖之间的树状视图,我们可以发现,在导入 connector-j 包时,也会自动导入 protobuf 这个包,protobufconnector-j 的直接依赖:

在这里插入图片描述


6.3 依赖排除


如果我们在 MavenDemo 项目中,不再需要 protobuf 这个 jar 包,就可以进行排除;

进行依赖排除之前,可能需要先配置好对应的 setting 中的镜像节点;


自动排除依赖

在这里插入图片描述


在这里插入图片描述


手动排除依赖

自动排除依赖操作用的比较少,也不好用,我们可以手动添加 <exclusions> 标签,对不需要的依赖进行排除:

在这里插入图片描述


此时,要排除的依赖中不需要写版本号,只需要写 groupIdartifactId

可以先写artifactId,idea 会自动生成 groupId

在这里插入图片描述


在这里插入图片描述


如果后续还需要添加依赖,则重新在<dependencies> 标签中再加一个<dependency>即可:

在这里插入图片描述


再次刷新,发现不再是引入mysql 的 jar 包后自动引入的 protobuf 了,树状显示没有从属关系:

在这里插入图片描述


7. Maven 仓库


我们通过短短几行代码,就把依赖jar包放在了项目里,具体是如何做的呢?

在这里插入图片描述

这个代码,我们称之为"坐标",坐标是唯一的

在Maven中,根据groupld、artifactld、version的配置,来唯一识别一个jar包,缺一不可.

当我们在pom文件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库里寻找Jar包,并把他下载下来,添加到项目中;这个Jar包下载的地方就称为仓库;


仓库:用于存储资源,管理各种jar包

Maven仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)

在这里插入图片描述


7.1 本地仓库


本地仓库:自己计算机上的一个目录(用来存储jar包)

当项目中引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包

  • 如果有,则在项目直接引用
  • 如果没有,则去中央仓库中下载对应的 jar 包到本地仓库

在这里插入图片描述


本地仓库地址可以通过 Maven 配置查看:

在这里插入图片描述


如果我们的 maven 仓库路径中出现中文,就要对这个路径进行修改,避免出现不必要的麻烦:

在这里插入图片描述


找到对应的目录:

在这里插入图片描述


在这里插入图片描述


把 m2 粘贴到自定义的目录

在这里插入图片描述


修改路径即可:

在这里插入图片描述


7.2 中央仓库


中央仓库: maven软件中内置一个远程仓库地址,就是中央仓库,服务于整个互联网;

由Maven 团队维护,全球唯一.

仓库地址:https://repo1.maven.org/maven2/

可以通过https://mvnrepository.com 这个网站来查询并下载;


我们可以把自己写好的 Jar 包上传到中央仓库(具备一定的要求),也可以从中央仓库下载Jar包;

在这里插入图片描述

查找Jar的坐标

1.访问 https://mvnrepository.com/

2.进行查找,比如mysql


在这里插入图片描述


只要已发布 jar 包,漏洞就无法修改,只能在更新新的修复 jar 包的漏洞:

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


粘贴到依赖中,如果代码显示红色,则只需要点击刷新,会自动下载好 jar 包,并且会在本地仓库的,目录中查找到下载好的 jar 包:

在这里插入图片描述


7.3 私有服务器


当Maven需要下载资源的时候

  1. 先从本地仓库获取,本地仓库存在,则直接返回
  2. 如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回
  3. 如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了…
  4. 如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库里,再为Maven的下载请求,提供服
    务;
  5. 私服是很多人在使用的,所以只需要第一个使用者下载一次就可以了

在这里插入图片描述


8. 配置国内源


8.1 配置当前项目 setting


在这里插入图片描述


把上面的 setting 文件复制到仓库路径:

在这里插入图片描述


或者把原来的 setting 文件镜像节点修改为:

		<mirror>
          <id>aliyunmaven</id>
          <mirrorOf>*</mirrorOf>
          <name>阿里云公共仓库</name>
          <url>https://maven.aliyun.com/repository/public</url>
        </mirror>

在这里插入图片描述


在这里插入图片描述


8.2 设置新项目的 setting


上面的设置只对当前这个项目生效,我们还需要进一步设置

在这里插入图片描述


找到 maven ,修改里面的路径,刚刚设置好的路径都会对以后创建 maven 项目生效:

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的安装以及数据库的基本配置

MySQL的安装及配置 MySQL的下载 选择想要安装的版本&#xff0c;点击Download下载 Mysql官网下载地址&#xff1a;​ ​https://downloads.mysql.com/archives/installer/​​ MySQL的安装 选择是自定义安装&#xff0c;所以直接选择“Custom”&#xff0c;点击“Next”​ …

Manus AI : Agent 元年开启.pdf

Manus AI : Agent 元年开启.pdf 是由华泰证券出品的一份调研报告&#xff0c;共计23页。报告详细介绍了Manus AI 及 Agent&#xff0c;主要包括Manus AI 的功能、优势、技术能力&#xff0c;Agent 的概念、架构、应用场景&#xff0c;以及 AI Agent 的类型和相关案例&#xff0…

2.数据结构-栈和队列

数据结构-栈和队列 2.1栈2.1.1栈的表示和实现2.1.2栈的应用举例数制转换括号匹配检验迷宫给求解表达式求值 2.1.3链栈的表示和实现2.1.4栈与递归的实现遍历输出链表中各个结点的递归算法*Hanoi塔问题的递归算法 2.2队列2.2.1循环队列——队列的顺序表示和实现2.2.2链队——队列…

(十七) Nginx解析:架构设计、负载均衡实战与常见面试问题

什么是Nginx? Nginx 是一款高性能的 HTTP 服务器和反向代理服务器&#xff0c;同时支持 IMAP/POP3/SMTP 协议。其设计以高并发、低资源消耗为核心优势&#xff0c;广泛应用于负载均衡、静态资源服务和反向代理等场景。 一、Nginx 的核心优势 高并发处理能力采用异步非阻塞的…

Cpu100%问题(包括-线上docker服务以及Arthas方式进行处理)

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

【大模型】WPS 接入 DeepSeek-R1详解,打造全能AI办公助手

目录 一、前言 二、WPS接入AI工具优势​​​​​​​ 三、WPS接入AI工具两种方式 3.1 手动配置的方式 3.2 Office AI助手 四、WPS手动配置方式接入AI大模型 4.1 安装VBA插件 4.1.1 下载VBA插件并安装 4.2 配置WPS 4.3 WPS集成VB 4.4 AI助手效果测试 4.5 配置模板文…

架构思维:高性能架构_01基础概念

文章目录 概述基础概念性能指标利特尔法则&#xff08;O T L&#xff09;系统优化策略1. 降低耗时&#xff08;L↓&#xff09;2. 增加容量&#xff08;O↑&#xff09;3. 增加时延&#xff08;L↑&#xff09; 场景化指标选择响应时间优先吞吐量/容量优先平衡策略 概述 一个…

解决stylelint对deep报错

报错如图 在.stylelintrc.json的rules中配置 "selector-pseudo-class-no-unknown": [true,{"ignorePseudoClasses": ["deep"]} ]

VScode 中文符号出现黄色方框的解决方法

VScode 中文符号出现黄色方框的解决方法 我的vscode的python多行注释中会将中文字符用黄色方框框处&#xff1a; 只需要打开设置搜索unicode&#xff0c;然后将这一项的勾选取消掉就可以了&#xff1a; 取消之后的效果如下&#xff1a; 另一种情况&#xff1a;中文显示出现黄色…

大模型架构记录2

一 应用场景 1.1 prompt 示例 1.2 自己搭建一个UI界面&#xff0c;调用接口 可以选用不同的模型&#xff0c;需要对应的API KEY 二 Agent 使用 2.1 构建GPT

深度学习实战车辆目标跟踪与计数

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化&#xff0c;该数据集包含丰富的车辆目标图像样本…

升级到Android Studio 2024.2.2 版本遇到的坑

一、上来就编译报错&#xff0c;大概率是因为选择了替换安装&#xff0c;本地配置文件出错 找到本地当前版本的配置文件&#xff0c;删掉&#xff0c;重启studio就好了&#xff1a; 1、打开终端 2、“cd /Users/用户名/Library/Application\ Support/Google” //到Google目录 …

Git - 补充工作中常用的一些命令

Git - 补充工作中常用的一些命令 1 一些场景1.1 场景11.2 场景21.3 场景31.4 场景41.5 场景51.6 场景61.7 场景71.8 场景81.9 场景91.10 场景101.11 场景111.12 场景121.13 场景131.14 场景141.15 场景15 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\-…

【网络安全工程】任务11:路由器配置与静态路由配置

目录 一、概念 二、路由器配置 三、配置静态路由CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog 一、概念 1、路由器的作用&#xff1a;通过路由表进行数据的转发。 2、交换机的作用&#xff1a;通过学习和识别 MAC 地址&#xff0c;依据 M…

如何用更少的内存训练你的PyTorch模型?深度学习GPU内存优化策略总结

在训练大规模深度学习模型时&#xff0c;GPU 内存往往成为关键瓶颈&#xff0c;尤其是面对大型语言模型&#xff08;LLM&#xff09;和视觉 Transformer 等现代架构时。由于大多数研究者和开发者难以获得配备海量 GPU 内存的高端计算集群&#xff0c;掌握高效的内存优化技术至关…

Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echarts助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)

Dify部署参考&#xff1a;Dify Rag部署并集成在线Deepseek教程&#xff08;Windows、部署Rag、安装Ragan安装、安装Dify安装、安装ollama安装&#xff09; DifyDeepSeek - Excel数据一键可视化&#xff08;创建步骤案例&#xff09;-DSL工程文件&#xff08;可直接导入&#x…

linux下ollama离线安装

一、离线安装包下载地址 直接下载地址&#xff1a; https://github.com/ollama/ollama/releases/tag/v0.5.12 网络爬取地址&#xff1a; MacOS https://ollama.com/download/Ollama-darwin.zip Linux curl -fsSL https://ollama.com/install.sh | sh Windows https://olla…

MAC 搭建Dify+DeepSeek-R1整合部署

在开始安装之前&#xff0c;我们需要确保系统满足以下基本要求&#xff1a; CPU至少2核心内存至少4GB&#xff08;建议8GB以上&#xff09;硬盘空间至少20GB&#xff08;为了后续扩展&#xff09;操作系统支持&#xff1a;Windows、macOS或LinuxDocker环境 1. dify的安装步骤…

OpenManus介绍及本地部署体验

1.OpenManus介绍 OpenManus&#xff0c;由 MetaGPT 团队精心打造的开源项目&#xff0c;于2025年3月发布。它致力于模仿并改进 Manus 这一封闭式商业 AI Agent 的核心功能&#xff0c;为用户提供无需邀请码、可本地化部署的智能体解决方案。换句话说&#xff0c;OpenManus 就像…

springboot011基于springboot的课程作业管理系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得难了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等&#xff0c;你想解决的问题&#xff0c;今天…