Maven的初步认识
初识Maven什么是Maven如果把写代码比作炒菜.那么通过java写代码就是得先洗菜,切菜,备调料,做好一切准备后才能正式的开始炒菜.但如果是使用Maven,这个Maven就像助手一样,把简单的洗菜切菜都做好了,只需要你自己去直接炒菜就行在之前的java开发中,如果我们要写一个简单的HTTP请求,哪怕这个请求只是简单的发送一个hello world,我们都必须从头开始写上HTTP协议的源码.但如果使用Maven,我们就可以不用大费周章的去写那HTTP源码了,我们只需要写出业务逻辑本身(输出hallo world)即可,因为Maven会帮我们弄好这个HTTP的源码用官方的话来说:Maven是一个项目管理和构建自动化的工具.它主要服务于Java项目,核心思想是基于POM(Project Object Model,项目对象模型)如何创建Maven项目在此以IDEA2026.1.4为例创建项目时选择Maven即可创建好后,我们写的核心代码就在这个Java包里面了Maven核心功能Maven的核心功能体现在两个方面项目构建管理依赖由于我们只是初步认识,所以只会测试常用功能项目构建首当其冲的就是打包命令,在Maven中,打包很简单按图示依次点击最右侧的Maven图标,在新页面的点击生存期,最后点击package即可打包是把所有的class文件全部放在一起打好的jar包可以引入到其它项目中,也可以直接使用这个jar包的属性.还可以作为可执行jar包,可直接通过java -jar命令来运行点击完后,IDEA的终端会显示一堆日志,只要最后日志显示的是绿色的BUILD SUCCESS就代表打包成功[INFO] --- jar:3.4.1:jar (default-jar) J20260323 --- [INFO] Building jar: E:\code\class-118-java\practice\J20260323\target\J20260323-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.215 s [INFO] Finished at: 2026-07-17T17:52:2908:00 [INFO] ------------------------------------------------------------------------依赖管理一开始我们就提到Maven是一个项目管理工具.作为是管理工具,其可以通过pom.xml文件来配置依赖例如我们想要添加一个JDBC的依赖,只需要在pom.xml文件就可以配置了具体配置流程如下(只修改注释部分)projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdJ20260323/artifactIdversion1.0-SNAPSHOT/versionpropertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/properties!-- 以下为添加依赖流程 --!-- 1. 依赖集合标签 --dependencies!-- 2. 单个依赖项标签每一个第三方jar包都用这个包裹 --dependency!-- 3. 组织/公司/项目唯一标识 --groupIdcom.mysql/groupId!-- 4. 项目构件名当前库的名字 --artifactIdmysql-connector-j/artifactId!-- 5. 依赖包的版本号 --version9.4.0/version/dependency/dependencies/project按上述配置完pom.xml文件后,我们可以通过点击下面两个地方的其中一个,进行Maven同步操作即可同步完毕后,我们查看外部库,就会发现多了Maven有关的依赖可以发现使用Maven添加依赖非常的方便快捷.哪怕说要切换依赖版本也只需要在pom.xml文件中简单修改一下版本号再进行同步即可依赖传递另外有没有注意到我们只是添加了一个依赖描述.但是实际上添加了两个依赖(查看上图)这算因为依赖也会有依赖需要添加.什么意思呢?比如我要添加依赖A,而依赖A又依赖依赖B才能正常运行,因此当我们添加依赖A时也必须添加依赖B才能正常使用依赖A这也是使用Maven管理依赖的一个好处,因为Maven会自动添加依赖所需的依赖.项目A项目B项目Cjar_ajar_bjar_c1jar_djar_ejar_c2对于上图,如果我们引入jar_a.那么Maven会自动引入jar_a的依赖jar_b和jar_c2.同理,如果我们引入项目B,那么项目B所依赖的项目C和jar包都会被引入.直接依赖:在当前项目中通过配置依赖建立的依赖关系对于项目A来说,项目B和jar_a就是直接依赖间接依赖:在当前项目中由配置的依赖引入的非配置依赖对于项目A来说,项目C和jar_b就是间接依赖依赖的优先级对于上面的例子,我们可以发现引入了两个不同版本的jar_c.那么依赖在加载的时候也会加载两个不同版本的jar_c吗?实际上在依赖的加载情况中,对于同一个依赖,只加载一个就行.加载的依赖是最短路径依赖最短路径依赖就是从项目A开始算,哪个依赖离项目A近就使用哪个依赖例如一个jar_c1的路径是[项目A]–[项目B]–[项目C]–[jar_c1]另一个jar_c2的路劲是[项目A]–[jar_a]–[jar_c2]由于第二个个jar_c2加载只需要走3步,故只会加载该jar_c2,而不会加载另一个需要4步的jar_c1当然在实际开发中,我们也可以专门指定要加载的版本,上述是不加干预的默认加载情况依赖剔除那假如我们不想要这个自动添加的依赖呢?也很简单,只要简单修改一下pom.xml,使用exclusions关键字告诉Maven我不需要这个依赖即可dependencies!-- 2. 单个依赖项标签每一个第三方jar包都用这个包裹 --dependency!-- 3. 组织/公司/项目唯一标识 --groupIdcom.mysql/groupId!-- 4. 项目构件名当前库的名字 --artifactIdmysql-connector-j/artifactId!-- 5. 依赖包的版本号 --version9.4.0/versionexclusions!-- 单条排除规则用来剔除指定第三方包 --exclusion!-- 需要被排除的依赖的厂商groupId --groupIdcom.google.protobuf/groupId!-- 需要被排除的依赖的构件artifactId --artifactIdprotobuf-java/artifactId/exclusion/exclusions/dependency/dependencies此时再刷新就会发现自带的google依赖没有了,当然这样也会导致引入的mysql依赖无法使用Maven Help 插件在实际开发中,有是项目比较复杂,依赖非常多,而且容易发生依赖冲突问题.此时若我们要排查依赖冲突问题,又得找到依赖冲突.为了方便快捷找到依赖冲突,我们可以使用Maven Help插件来观察依赖关系下面是Maven Help 插件的添加方法安装后重启IDEA并重新打开pom文件即可使用观察编辑器区域的左下角会多出两个切换标签一个是Text,另一个是Dependency Analyzer切换到Dependency Analyzer即可里面可以直观看到依赖关系,也可以修改和禁用依赖Maven仓库前面我们通过修改pom文件来获取依赖.那么这个依赖是怎么获取到的呢?在Maven中,是根据我们填入的groupld,artifactld,version来配置一个jar包的,对于一个jar包,这三个属性也是缺一不可的;另外这样称为依赖的坐标,每一个坐标都是唯一的配置好坐标后,Maven会根据坐标内容,去仓库里寻找jar包,从仓库下载并添加到项目中Maven仓库分为两大类:本地仓库和远程仓库.而远程仓库又分为中央仓库,私人服务器和其它公共仓库本地仓库本地仓库是自己计算机上的一个目录,作用就是存储jar包.在引入依赖时,Maven会优先检查本地仓库是否存在对应依赖,存在则使用,不存在则从远程仓库下载到本地仓库再使用中央仓库Maven中会内置一个远程仓库的地址.这个远程仓库就是中央仓库,服务于全球,由Maven团队维护仓库地址:https://repo1.maven.org/maven2/私有服务器私有服务器一般是由公司搭建的私有仓库.通常使用该仓库需要一定权限依赖下载顺序检查本地仓库是否存在该jar包,若存在则直接使用,不存在进入下一步检查是否存在私人服务器,若存在则使用私人服务器查找jar包,存在对应jar包时从私人服务器下载到本地仓库并使用若不存在私人服务器或私人服务器没有对应的jar包,则会去中央仓库进行查找

相关新闻

深入解析MSPM0基础定时器:从原理到六大应用场景实战

深入解析MSPM0基础定时器:从原理到六大应用场景实战

1. 基础定时器(TIMB)在嵌入式系统中的核心地位在嵌入式系统开发中,定时器(Timer)就如同系统的心跳,是维持一切有序运行的基石。无论是简单的LED闪烁、按键消抖,还是复杂的电机控制、通信协议时序…

2026/7/24 1:58:28阅读更多 →
【AI办公自动化实战指南】:20年IT专家亲授12个高频场景落地公式,错过再等一年

【AI办公自动化实战指南】:20年IT专家亲授12个高频场景落地公式,错过再等一年

更多请点击: https://kaifayun.com 第一章:AI办公自动化的核心价值与落地逻辑 AI办公自动化并非简单地用模型替代人工操作,而是通过语义理解、流程编排与系统集成,重构人机协同的工作范式。其核心价值体现在三重跃迁:…

2026/7/24 1:58:28阅读更多 →
虾皮之家关闭了怎么办?不同需求的替代方案全攻略

虾皮之家关闭了怎么办?不同需求的替代方案全攻略

上周有个做了两年Shopee的朋友给我发消息:"这款插件插件不能用了,我每天选品效率直接砍半,有什么替代方案?"我让他先别急,问了他一个问题:"你之前用它,主要看什么数据&#xff1…

2026/7/24 1:58:28阅读更多 →
LVDS高速PCB设计实战:从阻抗控制到电源完整性的信号完整性指南

LVDS高速PCB设计实战:从阻抗控制到电源完整性的信号完整性指南

1. 项目概述与核心挑战在高速数字电路的世界里,信号完整性(SI)是决定系统成败的隐形裁判。当数据速率攀升到数百Mbps甚至Gbps级别时,PCB上的每一根走线都不再是简单的电气连接,而是一段需要精心设计的传输线。其中&…

2026/7/24 3:39:01阅读更多 →
Unreal Engine柔体动力学:SPCR插件实现高效角色飘动效果

Unreal Engine柔体动力学:SPCR插件实现高效角色飘动效果

1. 项目概述:当“布风骨”遇见Unreal如果你在游戏开发或者影视动画领域摸爬滚打过一段时间,肯定对角色身上那些随风飘动的布料、柔顺的毛发,或者角色运动时肌肉的轻微颤动效果着迷。这些细节是让虚拟角色“活”起来的关键,但它们背…

2026/7/24 3:39:01阅读更多 →
Anthropic AI智能体在高风险领域的应用与技术解析

Anthropic AI智能体在高风险领域的应用与技术解析

1. Anthropic AI智能体的行业落地现状Anthropic作为AI领域的重要参与者,其开发的智能体技术正在快速渗透到金融、医疗、法律等高风险领域。根据实际部署案例观察,这些AI系统已开始承担信贷审批、医疗诊断辅助、法律文件审核等关键任务。与传统自动化工具…

2026/7/24 3:39:01阅读更多 →
2026国内大模型免费API资源与实战优化方案

2026国内大模型免费API资源与实战优化方案

1. 2026国内大模型免费API资源全景解析作为一名长期关注AI技术落地的开发者,我亲历了从2023年大模型爆发到2026年生态成熟的完整周期。当前国内大模型API市场已形成三层供给体系:头部厂商的基础模型API、垂直领域的专业API、以及开源社区的创新API。根据…

2026/7/24 3:39:01阅读更多 →
2026智能体开发实战:核心技术解析与商业落地指南

2026智能体开发实战:核心技术解析与商业落地指南

1. 智能体技术现状与学习价值评估2026年的智能体技术已经发展到什么程度?这个问题困扰着不少准备入行的开发者。从我在AI行业八年的实战经验来看,智能体技术正在经历从实验室到产业化的关键转折期。去年参与某金融风控智能体项目时,我们团队用…

2026/7/24 3:39:01阅读更多 →
AI工具链助力学术开题:从文献综述到研究设计

AI工具链助力学术开题:从文献综述到研究设计

1. 学术写作的智能化转型契机最近在指导本科生论文开题时,发现一个有趣现象:超过70%的学生在开题报告阶段就陷入文献综述的泥潭。他们要么被海量文献淹没,要么苦于无法精准提炼研究空白。这让我开始系统测试各类AI写作工具的组合应用&#xf…

2026/7/24 3:37:01阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →