当前位置: 首页 > news >正文

Maven讲解

介绍

Maven是一个流行的构建工具和项目管理工具,它主要用于Java项目的构建、依赖管理和项目报告生成。Maven通过提供一致的项目结构、自动化的构建过程和强大的依赖管理,简化了项目的开发和维护过程。

下面是一些Maven的主要特点和用途:

  • 项目结构管理:Maven规定了一种标准的项目目录结构,使得项目的组织和管理更加统一和规范化。这样可以方便开发者共享项目,并且降低新成员加入项目的学习成本。

  • 构建工具:Maven可以自动化执行项目的构建过程,包括编译源代码、运行测试、打包、部署等。通过定义项目的构建生命周期和插件,Maven可以轻松执行这些任务,提高开发效率。

  • 依赖管理:Maven提供了强大的依赖管理功能,可以自动下载和管理项目所依赖的第三方库和框架。通过在项目配置文件(pom.xml)中定义依赖关系,Maven可以自动解析、下载和导入所需的依赖项,大大简化了项目的依赖管理。

  • 插件系统:Maven支持丰富的插件系统,可以通过插件扩展和定制构建过程。开发者可以使用已有的插件或编写自己的插件,以满足特定的项目需求。

  • 跨平台支持:Maven是基于Java开发的,因此可以在多个操作系统上运行,并且能够管理不同类型的项目,而不仅仅局限于Java项目。

简单来说maven就是一个软件,这个软件的作用就是帮助你快速构建你的Java项目 帮助你更好的管理和构建依赖,还有一个非常好的好处就是说,当我们使用idea编写时 不借助maven的情况下 文件的目录结构和eclipse是不同的 ,这就导致使用不同版本的代码时,我们会需要下载不同编译器来构建对应的项目,而maven成功解决了这个问题,只要保证配置没有问题 ,那么可以直接进行编写程序和运行程序。

使用maven的好处

  1. maven可以帮助快速打包项目 比如说将一个web项目打包成jar/war之后放到服务器中。(可以直接使用命令来打包成指定的格式 maven package)
  2. 依赖管理:可以管理项目的依赖 ,自动下载所需的依赖库,并且保证版本没有冲突,依赖版本管理。
  3. 构建管理:maven可以帮助管理项目的编译,测试,打包,部署等过程,通过实现标准的构建生命周期,maven可以确保每一个构建过程遵循同样的规则和最佳实践。

maven标签的规定

遵循GAV的规则:
Maven标签的规定主要遵循GAV(GroupID、ArtifactID、Version)的命名规则。具体规定如下:

GroupID

GroupID是项目的唯一标识符,通常采用反向域名的方式命名,以保证全球唯一性。根据Maven的规定,GroupID应该由三部分组成:公司/BU名称、业务线名称、子业务线名称。例如,com.example.project可以表示一个名称为project的项目,它属于example公司,业务线为project。

ArtifactID

ArtifactID是项目的名称,它也必须是唯一的。ArtifactID通常是一个短名称,用来描述项目或模块的名称。例如,如果项目名称是myproject,则ArtifactID通常会是myproject。

Version

Version是项目的版本号,用于区分不同版本的项目。每次发布新版本时,Version都应该被更新。版本号通常采用三位数字进行表示,例如1.0.0、1.1.0等。

maven怎么导入依赖呢?

我们使用jackson做一个例子
直接在pom.xml中进行配置
在这里插入图片描述
外层的dependencies标签表明里面的都是依赖 可以把他理解成是一个依赖集合
内层的一级标签 dependency标识这是个依赖内容
groupId项目唯一标识
artifactId项目名称
version项目的版本信息
规定完成之后直接 重新加载项目在这里插入图片描述

maven项目的一些特点

依赖传递:

依赖传递指的是当一个模块或库 A 依赖于另一个模块或库 B,而 B 又依赖于模块或库 C,那么A会间接依赖于 C。这种依赖传递结构可以形成一个依赖树。当我们引入一个库或框架时,构建工具(如 Maven、Gradle) 会自动解析和加载其所有的直接和间接依赖,确保这些依赖都可用。
依赖传递的作用是:

  1. .减少重复依赖:当多个项目依赖同一个库时,Maven 可以自动下载并且只下载一次该库。这样可以减少项目的构建时间和磁盘空间。
  2. 自动管理依赖: Maven 可以自动管理依赖项,使用依赖传递,简化了依赖项的管理,使项目构建更加可靠和一致。
  3. 确保依赖版本正确性:通过依赖传递的依赖,之间都不会存在版本兼容性问题,确实依赖的版本正确性!

简单的说依赖传递就是指,当某个项目A依赖于项目B,并且项目B又依赖于项目C时,依赖传递机制会自动将项目C的依赖项也引入到项目A中。这样,项目A就可以直接使用项目B的功能,而不需要手动添加项目C的依赖。

也就是我写了一个A项目 A项目需要用到B项目 当我下载A的时候也顺带下了关联的B项目

依赖冲突

根据依赖传递的规定很容易发现一个bug那就是
在这里插入图片描述
也就是说A依赖于B B依赖于C 那么我们会发现一个现象 这就是一个死循环问题,A下载B ,B下载C, C下载A成为一个闭环问题。

依赖冲突的规定:发现已经存在依赖(重复依赖) 会终止依赖传递!避免循环依赖和重复依赖的问题!

依赖冲突的原则

  1. 第一原则:
    谁短谁优先,引用路径长度。
    比如说: - 表示依赖
    A-C-B(1.0)
    F-B(2.0)
    最后的版本结果 A C F B(2.0)
  2. 第二原则
    谁上谁优先!dependencies声明的先后顺序
    A-B 1.0
    F-B 2.0
    最终结果 A-F-B 1.0

maven出现失败的场景

本地仓库被污染

当本地文件没有这个依赖但是并不访问阿里云中央仓库 此时就要先删除污染源 然后继续请求 删除掉本地maven仓库缓存
在这里插入图片描述

扩建构建管理和插件配置

使用命名来进行配置和处理

  • mvn clean:清理项目,删除生成的目标文件和临时文件。

  • mvn compile:编译项目源代码。

  • mvn package:将项目打包为可发布的格式,如JAR或WAR。

  • mvn install:将项目打包并安装到本地Maven仓库,以供其他项目引用。

  • mvn deploy:将项目打包并部署到远程Maven仓库,用于共享和分发。

  • mvn test:运行项目的测试用例。

  • mvn site:生成项目的文档网站。

  • mvn dependency:tree:显示项目的依赖树,展示项目所依赖的库及其版本。

  • mvn clean install:清理项目并进行完整的构建,包括编译、打包和安装。

  • mvn clean package:清理项目并进行打包,生成可发布的包。

maven的继承

在Maven中,继承是一种机制,允许您在项目之间共享和重用构建配置。Maven继承的主要目的是减少重复性的配置,使得在多个项目中更容易维护和管理构建过程。以下是Maven继承的关键概念:

父项目(Parent Project:父项目是一个包含通用配置的Maven项目,它定义了项目的基本结构、插件、依赖等信息。子项目可以继承自一个父项目。

子项目(Child Project):子项目是继承自父项目的项目。子项目可以继承父项目的配置信息,也可以覆盖或添加自己的配置。

继承关系:继承是通过在子项目的pom.xml文件中使用元素来实现的。子项目通过指定父项目的groupId、artifactId和version来建立继承关系。

Copy code
<parent><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0.0</version>
</parent>

这样子项目就会继承父项目的配置信息。
默认值的覆盖:子项目可以覆盖父项目的配置。例如,可以在子项目中重新定义插件的版本或添加新的插件,而无需重新定义整个插件配置。

继承的优点:

代码重用:通过继承,可以在多个项目中重用相同的构建配置。
统一管理:父项目提供了一个集中管理和更新配置的地方,可以确保所有子项目保持一致。
减少冗余:避免在每个项目中重复相同的配置,减少维护成本。
多层次继承:Maven支持多层次的继承结构,即子项目可以再定义新的父项目,形成一个继承链。这样的结构可以更灵活地组织项目。

相关文章:

Maven讲解

介绍 Maven是一个流行的构建工具和项目管理工具&#xff0c;它主要用于Java项目的构建、依赖管理和项目报告生成。Maven通过提供一致的项目结构、自动化的构建过程和强大的依赖管理&#xff0c;简化了项目的开发和维护过程。 下面是一些Maven的主要特点和用途&#xff1a; 项…...

Redis2-事务 连接Java 整合springboot 注解缓存

一、订阅和发布 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以收到消息 发布订阅的代…...

CHFS 文件服务器搭建小记

一、CHFS 简介 摘自官网&#xff1a;http://iscute.cn/chfs CuteHttpFileServer/chfs 是一个免费的、HTTP协议的文件共享服务器&#xff0c;使用浏览器可以快速访问。它具有以下特点&#xff1a; 单个文件&#xff0c;核心功能无需其他文件跨平台运行&#xff0c;支持主流平台…...

vue中图片不显示问题 - vue中静态资源加载

文章目录 vue中图片不显示问题静态资源URL 转换规则webpack 静态资源处理 图片不显示问题问题描述解决办法1&#xff1a;使用require引入require is not defined 解决办法2&#xff1a;使用import引入解决办法3&#xff1a;将图片放进公共文件夹static或public vue中图片不显示…...

IP报文格式

IP报文格式 报文格式 图1 IP头格式 表1 IP头字段解释 字段长度含义Version4比特 4&#xff1a;表示为IPV4&#xff1b;6&#xff1a;表示为IPV6。IHL4比特首部长度&#xff0c;如果不带Option字段&#xff0c;则为20&#xff0c;最长为60&#xff0c;该值限制了记录路由选项。…...

k8s 进阶实战笔记 | Pod 创建过程详解

Pod 创建过程详解 ​ 初始状态0 controller-manager、scheduler、kubelet组件通过 list-watch 机制与 api-server 通信并检查资源变化 第一步 用户通过 CLI 或者 WEB 端等方式向 api-server 发送创建资源的请求&#xff08;比如&#xff1a;我要创建一个replicaset资源&…...

使用MMYOLO中yolov8训练自己VOC数据集实战

概述 MMYOLO是商汤公司基于PyTorch框架和YOLO系列算法开源的工具箱 - 目前支持的任务 目标检测旋转框目标检测 - 支持的算法 YOLOv5YOLOv6YOLOv7YOLOv8YOLOXRTMDetRTMDet-Rotated - 支持的数据集 COCO Dataset VOC Dataset CrowdHuman Dataset DOTA 1.0 Dataset 安装…...

解决方案 | 基于SFTP协议的文件传输断点续传Java实现方案

背景 因项目需要&#xff0c;我们服务每天都需要通过SFTP协议来对接上下游进行文件传输&#xff0c;但是对于一些大文件&#xff0c;在与第三方公司的服务器对接过程中很可能会因为网络问题或上下游服务器性能问题导致文件上传或者下载被中断&#xff0c;每次重试都需要重新对…...

web前端项目-动画特效【附源码】

文章目录 一&#xff1a;赛车游戏动画HTML源码&#xff1a;JS源码&#xff1a;CSS源码&#xff1a;&#xff08;1&#xff09;normalize.css&#xff08;2&#xff09;style.css 二&#xff1a;吉普车动画演示HTML源码&#xff1a;CSS源码&#xff1a;&#xff08;1&#xff09…...

蓝桥杯备战——6.串口通讯

1.分析原理图 由上图我们可以看到串口1通过CH340接到了USB口上&#xff0c;通过串口1我们就能跟电脑进行数据交互。 另外需要注意的是STC15F是有两组高速串口的&#xff0c;而且可以切换端口。 2.配置串口 由于比赛时间紧&#xff0c;我们最好不要去现场查寄存器手册&#x…...

Redis为什么速度快:数据结构、存储及IO网络原理总结

Redis&#xff0c;作为内存数据结构存储的佼佼者&#xff0c;其高性能表现一直备受赞誉。那么&#xff0c;Redis究竟是如何实现这一点的呢&#xff1f;接下来&#xff0c;我们将更深入地探讨其背后的关键技术&#xff0c;并提供进一步的优化策略。 一、内存存储与数据结构设计…...

OSI七层模型 | TCP/IP模型 | 网络和操作系统的联系 | 网络通信的宏观流程

文章目录 1.OSI七层模型2.TCP/IP五层(或四层)模型3.网络通信的宏观流程3.1.同网段通信3.2.跨网段通信 1.OSI七层模型 在计算机通信诞生之初&#xff0c;不同的厂商都生产自己的设备&#xff0c;都有自己的网络通讯标准&#xff0c;导致了不同厂家之间各种协议不兼容&#xff0…...

Java集合总览

1.总览 Java中的集合分List、Set、Queue、Map 4种类型。 List&#xff1a;大多数实现元素可以为null&#xff0c;可重复&#xff0c;底层是数组或链表的结构&#xff0c;支持动态扩容 Set&#xff1a;大多数实现元素可以为null但只能是1个&#xff0c;不能重复&#xff0c; …...

C# 设置一个定时器函数

C#中&#xff0c;创建设置一个定时器&#xff0c;能够定时中断执行特定操作&#xff0c;可以用于发送心跳、正计时和倒计时等。 本文对C#的定时器简单封装一下&#xff0c;哎&#xff0c;以方便定时器的创建。 定义 using Timer System.Timers.Timer;class SetTimer {Timer …...

第十四届蓝桥杯省赛pythonB组题。 管道

5407. 管道 - AcWing题库 ​​​ 有一根长度为 len的横向的管道&#xff0c;该管道按照单位长度分为 len 段&#xff0c;每一段的中央有一个可开关的阀门和一个检测水流的传感器。 一开始管道是空的&#xff0c;位于 Li 的阀门会在 Si 时刻打开&#xff0c;并不断让水流入管道。…...

淘宝扭蛋机小程序:新时代的互动营销与娱乐体验

随着科技的快速发展&#xff0c;小程序已经成为人们日常生活中不可或缺的一部分。在众多的小程序中&#xff0c;淘宝扭蛋机小程序以其独特的互动性和趣味性&#xff0c;吸引了大量用户。本文将深入探讨淘宝扭蛋机小程序的特色、用户体验以及未来发展。 一、淘宝扭蛋机小程序的…...

深度强化学习(王树森)笔记02

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…...

【分布式技术专题】「分布式技术架构」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)

探索Tomcat技术架构设计模式的奥秘 Tomcat系统架构分析Tomcat 整体结构Tomcat总体结构图以 Service 作为“婚姻”1) Service 接口方法列表 2) StandardService 的类结构图方法列表 3) StandardService. SetContainer4) StandardService. addConnector 以 Server 为“居”1) Ser…...

常用的gpt-4 prompt words收集8

本文介绍我最近收集的一些好用的chatgpt-4的prompts&#xff0c;如果你也有好用的提示词可以互相交流一下。 1. I ran into some trouble on my way to work. 迟到原因 2. In my heart, the most delicious coffee is the Hawaii Dirty from Manner. Only the Nong series a…...

【GitHub项目推荐--开源2D 游戏引擎】【转载】

microStudio 是一个可在浏览器中运行的游戏引擎&#xff0c;它拥有一套精美、设计精良、全面的工具&#xff0c;可以非常轻松地帮助你创建 2D 游戏。 你可以在浏览器中访问 microStudio.dev 开始搭建你的游戏&#xff0c;当然你可以克隆现有项目或创建新游戏并开始编码&#x…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...