maven详细讲解

学习目标

  • 那什么是maven
  • maven概念以及核心思想
  • maven构建的生命周期、阶段以及目标
  • maven仓库有哪些?
  • maven依赖

那什么是maven?maven概念以及核心思想,maven构建的生命周期、阶段以及目标?

那什么是maven

Maven是一个项目管理和构建自动化工具,它主要用于Java项目的构建、依赖管理和项目生命周期管理。以下是对Maven的详细解释:

一、Maven的核心功能

  1. 项目管理和构建:Maven能够管理项目的构建、报告和文档,提供了一个清晰的项目结构。它使用约定俗成的目录结构,使得所有的项目都有相同的目录布局,有助于开发人员对项目结构有明确的认识,更容易理解和维护代码。
  2. 依赖管理:Maven通过一个文本文件(通常被称为pom.xml)来定义项目的依赖关系。开发人员只需要在pom.xml文件中指定所需的依赖,Maven就能自动下载并导入这些依赖。这样,开发人员不再需要手动管理项目的依赖,大大减少了出错的可能性。
  3. 自动化构建:Maven提供了一些默认的构建生命周期和插件,以帮助开发人员自动化构建和测试过程。通过简单的命令行操作,就可以完成项目的编译、测试、打包和部署等任务。

二、Maven的其他特性

  1. 代码质量保证:Maven可以与一些插件一起使用,生成一些简单的单元测试报告,帮助开发人员了解代码的质量,并提供改进的建议。
  2. 项目文档生成:Maven可以生成项目的文档,包括API文档、项目报告等,帮助开发人员更好地理解项目的结构和实现。
  3. 统一构建环境:Maven能够提供一个统一的构建环境,使得不同的开发人员可以在相同的配置下进行开发和构建。这有助于提高项目的可维护性和可重用性。
  4. 多模块项目管理:Maven支持多模块项目的构建和管理,可以将多个相关的项目组织成一个项目,方便统一管理和构建。
  5. 插件扩展性:Maven有丰富的插件生态系统,开发人员可以通过自定义插件来扩展Maven的功能,满足项目的特定需求。
  6. 跨平台构建:Maven的构建过程是跨平台的,无论是在Windows、Linux还是Mac OS上,都能保证相同的构建结果。
  7. 集成版本控制系统:Maven可以与版本控制系统(如Git)集成,方便管理项目的版本和发布。
  8. 部署和发布:Maven提供了一套完整的部署和发布机制,开发人员可以通过简单的命令将项目发布到本地仓库或者远程仓库。

三、Maven的起源与发展
Maven起源于2002年,由Apache Software Foundation(ASF)发起并维护。它是一个功能全面、易于使用的项目管理工具,适用于各种规模的项目。通过使用Maven,开发人员可以更高效地管理项目、减少错误、提高代码质量和可维护性。

maven概念以及核心思想

Maven是一个项目管理和自动化构建工具,它在Java开发领域有着广泛的应用。以下是对Maven概念及其核心思想的详细解释:

Maven概念
Maven是一个基于项目对象模型(POM,Project Object Model)概念的项目管理工具。它主要用于Java项目的构建、依赖管理和项目生命周期管理。通过Maven,开发者可以以一种高效且统一的方式管理项目的构建、依赖、文档生成、报告等各个环节。Maven提供了一个清晰的项目结构,并使用pom.xml文件来描述项目的配置信息,包括项目的名称、版本、依赖关系、构建步骤等。

Maven核心思想
Maven的核心思想是“约定优于配置”(Convention Over Configuration)。这一思想体现在Maven提供了一套默认的构建和依赖管理规则,使得开发者可以专注于业务逻辑的实现,而无需在项目的构建和配置上花费过多时间。具体来说,Maven的核心思想包括以下几个方面:

  1. 约定的目录结构:Maven规定了项目的标准目录结构,如src/main/java用于存放Java源代码,src/test/java用于存放测试代码等。开发者只需按照这些约定来组织代码,就可以轻松地使用Maven进行构建和管理。
  2. 自动化的依赖管理:Maven通过pom.xml文件来管理项目的依赖关系。开发者只需在pom.xml文件中指定所需的依赖,Maven就能自动从远程仓库下载并导入这些依赖及其传递性依赖。这样,开发者无需手动管理依赖的版本和路径,大大减少了出错的可能性。
  3. 标准化的构建生命周期:Maven定义了一套标准化的构建生命周期,包括编译、测试、打包、部署等阶段。开发者可以通过配置pom.xml文件来定制这些阶段的行为,以满足项目的特定需求。同时,Maven还提供了丰富的插件和扩展点,使得开发者可以根据自己的需求定制和扩展构建过程。
  4. 易于集成的版本控制:Maven可以与版本控制系统(如Git)集成,方便管理项目的版本和发布。通过Maven,开发者可以轻松地创建项目的快照版本和发布版本,并将其发布到本地仓库或远程仓库中。

maven构建的生命周期、阶段以及目标

Maven的构建生命周期定义了一个项目从构建到发布的过程,它分为互相独立的三部分,每个部分包含若干阶段,每个阶段又可以绑定若干插件目标来执行特定的任务。以下是Maven构建生命周期、阶段以及目标的详细解释:

一、Maven构建生命周期
Maven的构建生命周期主要分为以下三部分:

  1. Clean生命周期:用于清理项目。当执行构建之前,通常需要清理上一次构建生成的文件,以确保项目从一个干净的状态开始。Clean生命周期包括pre-clean、clean和post-clean三个阶段。
  2. Default(Build)生命周期:用于构建项目。这是Maven最常用的生命周期,它涵盖了项目构建的主要阶段,从验证项目的正确性到将项目的构建结果部署到远程仓库。Default生命周期包括validate、initialize、generate-sources、process-sources、generate-resources、process-resources、compile、test-compile、test、package、verify、install和deploy等阶段。
  3. Site生命周期:用于建立项目站点。它主要用于生成项目的文档和站点信息,并将生成的站点信息发布到远程服务器。Site生命周期包括pre-site、site、post-site和site-deploy等阶段。

二、Maven构建阶段
每个生命周期包含的阶段是有前后顺序的,并且后面的阶段依赖于前面的阶段。在执行Maven命令时,mvn命令之后使用的参数便是Maven的各个阶段。例如,执行mvn clean命令会执行Clean生命周期的pre-clean和clean两个阶段;执行mvn compile命令会执行Default生命周期的validate到compile这七个阶段。

三、Maven插件目标
Maven的操作是基于不同的插件的不同目标来实现的。一个插件中包括若干目标,而每个目标会执行一个特定的任务。这些目标可能被绑定到多个阶段或者无绑定。不绑定到任何构建阶段的目标可以在构建生命周期之外通过直接调用执行。

例如,在Clean生命周期的clean阶段,通常会绑定maven-clean-plugin插件的clean目标来执行清理文件的操作。而在Default生命周期的compile阶段,则会绑定maven-compiler-plugin插件的compile目标来编译项目的源代码。

四、阶段与插件目标的绑定关系
Maven内部通过配置文件(如META-INF/plexus/components.xml)来定义阶段与插件目标的绑定关系。开发者也可以在项目的pom.xml文件中通过配置插件的executions元素来自定义阶段与插件目标的绑定关系。

maven仓库有哪些?

Maven仓库是用于存储Maven构建的工件(artifacts)的集中式存储库,工件是构建过程中的产物,包括编译后的代码、文档、测试报告等。Maven仓库主要分为以下几种类型:

一、本地仓库

  • 定义:本地仓库是存储在本地磁盘上的仓库,是默认的仓库类型。
  • 作用:当Maven在执行构建时,会首先在本地仓库中查找所需的依赖项和插件。如果本地仓库中不存在所需的依赖项或插件,Maven会从远程仓库下载并将其存储在本地仓库中。
  • 位置:默认情况下,本地仓库位于用户主目录下的.m2/repository目录中,但可以在Maven的配置文件settings.xml中进行配置以更改位置。

二、远程仓库

  • 定义:远程仓库是存储在网络上的仓库,可以由中央仓库、私服仓库和其他公共远程仓库等组成。
  • 作用:当Maven在本地仓库中找不到所需的依赖项或插件时,它会从远程仓库中下载。
  • 分类
    • 中央仓库:由Maven团队维护的远程仓库,包含了世界上大部分流行的开源项目的构件。中央仓库包含了大量的常用依赖项和插件,是最常用的远程仓库之一。
    • 私服仓库:一种特殊的远程仓库,通常由公司内部维护。私服仓库可以作为公司内部构件的共享存储库,也可以作为公用类库的镜像缓存,减少在外部访问和下载的频率。私服仓库还可以减少对中央仓库的访问,提高构建效率,并保证公司内部项目的构件一致性。
    • 其他公共远程仓库:除了中央仓库和私服仓库之外,还有一些其他的公共远程仓库,如JFrog、Nexus等。这些仓库提供了更丰富的构件选择,包括一些非开源的商业构件。

三、详细解释特定仓库

  • 私服仓库:在企业内部使用的仓库,用于存储公司内部的依赖和插件。建立私服仓库的好处包括节省外网带宽、加速Maven构建、部署无法在远程仓库部署的第三方构件或项目输出供内部项目使用、提高Maven构建的稳定性以及减少中央仓库的高访问负荷。
  • 镜像仓库:有时为了加速依赖的下载或解决网络访问问题,会使用镜像仓库来代替原始的中央仓库或其他远程仓库。例如,国内用户通常会使用阿里云Maven仓库、华为云Maven仓库、腾讯云Maven仓库等国内镜像仓库来加速依赖的下载。

maven依赖

Maven依赖是指Maven项目在编译、构建和执行过程中所依赖的外部对象或库。这些依赖通常是Java归档(jar)文件,包含编译代码或其他项目所需资源。以下是对Maven依赖的详细解释:

一、依赖的声明
在Maven中,依赖是在项目的pom.xml文件中声明的。pom.xml文件是Maven项目的核心配置文件,用于定义项目的构建、依赖、插件等。依赖的声明通常位于pom.xml文件的<dependencies>标签内,每个<dependency>标签代表一个依赖。

依赖的声明包含以下关键元素:

  1. groupId:依赖所属的组或组织。
  2. artifactId:依赖的唯一标识符。
  3. version:要使用的依赖版本。

这三个元素共同构成了依赖的坐标,Maven根据这些坐标来查找和下载所需的依赖。

二、依赖的范围(scope)
依赖的范围定义了依赖在项目的不同阶段(编译、测试、运行)中的可用性。Maven支持以下几种依赖范围:

  1. compile:默认范围,适用于所有类路径。在编译、测试和运行阶段都需要该依赖。
  2. provided:编译时可用,但不会包含在最终的包中。这种范围的依赖在运行时由JDK或容器提供。例如,servlet-api在编译和测试时需要,但在运行时由Servlet容器提供。
  3. runtime:运行时可用,但编译时不可用。这种范围的依赖在编译时不需要,但在测试和运行时需要。例如,JDBC驱动在编译时只需要JDK提供的JDBC接口,但在运行时需要具体的JDBC驱动实现。
  4. test:仅在测试期间可用。这种范围的依赖仅用于测试阶段,在编译和运行项目时无法使用。例如,JUnit测试框架。
  5. system:类似于provided,但需要显式提供依赖文件的路径。这种范围的依赖不依赖Maven仓库解析,因此可能会造成构建的不可移植性。通常不推荐使用。

三、传递性依赖
传递性依赖是指项目的直接依赖所依赖的其他库。Maven会自动解析这些传递性依赖,并将其包含在项目的构建路径中。这确保了所有必需的库都被包含在构建中。

四、依赖的排除
有时,项目可能需要排除特定的传递性依赖。这可以通过在<dependency>标签内添加<exclusions>子标签来实现。每个<exclusion>标签指定要排除的依赖的groupId和artifactId。

五、依赖的冲突与解决
当项目中存在多个版本的同一依赖时,Maven使用最近定义策略来解决冲突。最近的POM文件(最接近项目的POM文件)中指定的版本优先。为了显式控制依赖的版本,可以使用<dependencyManagement>部分来统一管理依赖版本。

六、依赖的仓库
Maven使用仓库来下载依赖。仓库可以是本地仓库(位于开发者的机器上,Maven将下载的依赖缓存于此)或远程仓库(如Maven Central、公司自定义仓库等)。远程仓库可以在POM文件或Maven设置文件(settings.xml)中配置。

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

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

相关文章

DeepSeek 提示词之角色扮演的使用技巧

老六哥的小提示&#xff1a;我们可能不会被AI轻易淘汰&#xff0c;但是会被“会使用AI的人”淘汰。 在DeepSeek的官方提示库中&#xff0c;有“角色扮演&#xff08;自定义人设&#xff09;”的提示词案例。截图如下&#xff1a; 在“角色扮演”的提示词案例中&#xff0c;其实…

第二个Qt开发实例:在Qt中利用GPIO子系统和sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口(效果为LED2灯的灭和亮)

引言 本文承接博文 https://blog.csdn.net/wenhao_ir/article/details/145420998 里的代码&#xff0c;在那里面代码的基础上添加上利用sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口的代码&#xff0c;进而实现LED2灯的灭和亮。 最终的效果是点击下面的LED按钮实现LED…

登山第十七梯:矩形拟合——无惧噪声

文章目录 一 摘要 二 资源 三 内容 (文章末尾提供源代码) 一 摘要 目前,获取点集的矩形拟合结果的主要方法是计算其最小外包直立矩形或者旋转矩形。这些方法简单、易用,在数据质量良好的情况下能够较好的贴合矩形形状。然而,在数据缺失时,最小外包围盒方法将会…

57. Uboot图形化界面配置

一、Uboot图形化配置方法 1、通过终端配置。 2、进入到uboot的源码根目录下。 3、首先默认配置 make mx6ull_alientek_emmc_defconfig //默认配置 4、输入make menuconfig。打开图形化配置界面。 5、注意&#xff0c;新电脑需要安装ncurses库。sudo apt-get install libncurs…

kalman滤波器C++设计仿真实例第三篇

1. 仿真场景 水面上有条船在做匀速直线航行&#xff0c;航行过程中由于风和浪的影响&#xff0c;会有些随机的干扰&#xff0c;也就是会有些随机的加速度作用在船身上&#xff0c;这个随机加速度的均方差大约是0.1&#xff0c;也就是说方差是0.01。船上搭载GPS设备&#xff0c;…

(2025|ICLR,音频 LLM,蒸馏/ALLD,跨模态学习,语音质量评估,MOS)音频 LLM 可作为描述性语音质量评估器

Audio Large Language Models Can Be Descriptive Speech Quality Evaluators 目录 1. 概述 2. 研究背景与动机 3. 方法 3.1 语音质量评估数据集 3.2 ALLD 对齐策略 4. 实验结果分析 4.1 MOS 评分预测&#xff08;数值评估&#xff09; 4.2 迁移能力&#xff08;在不同…

stm32生成hex文件详解

1.产生的map文件干啥的&#xff1f; 2.组成情况&#xff1f;&#xff1f;&#xff1f; 废话少说&#xff0c;直接上代码具体内容况&#xff1a; Component: ARM Compiler 5.06 update 7 (build 960) Tool: armlink [4d3601]Section Cross Referencesstartup_stm32f103xe.o(S…

百度热力图数据获取,原理,处理及论文应用6

目录 0、数据简介0、示例数据1、百度热力图数据日期如何选择1.1、其他实验数据的时间1.2、看日历1.3、看天气 2、百度热力图几天够研究&#xff1f;部分文章统计3、数据原理3.1.1 ** 这个比较重要&#xff0c;后面还会再次出现。核密度的值怎么理解&#xff1f;**3.1.2 Csv->…

[转]Java面试近一个月的面试总结

本文是在学习中的总结&#xff0c;欢迎转载但请注明出处&#xff1a;http://blog.csdn.net/pistolove/article/details/46753275 前言 打算换个工作&#xff0c;近一个月面试了不少的公司&#xff0c;下面将一些面试经验和思考分享给大家。另外校招也快要开始了&#xff0c;为…

学习threejs,tga格式图片文件贴图

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️TGA图片1.2 ☘️THREE.Mesh…

MSPFN 代码复现

1、环境配置 conda create -n MSPFN python3.9 conda activate MSPFN pip install opencv-python pip install tensorflow pip install tqdm pip install matplotlib2、train 2.1 创建数据集 2.1.1 数据集格式 |--rainysamples |--file1&#xff1a; |--file2:|--fi…

20240206 adb 连不上手机解决办法

Step 1: lsusb 确认电脑 usb 端口能识别设备 lsusb不知道设备有没有连上&#xff0c;就插拔一下&#xff0c;对比观察多了/少了哪个设备。 Step 2: 重启 adb server sudo adb kill-serversudo adb start-serveradb devices基本上就可以了&#xff5e; Reference https://b…

《利用原始数据进行深度神经网络闭环 用于光学驻留空间物体检测》论文精读

Deep Neural Network Closed-loop with Raw Data for Optical Resident Space Object Detection 摘要 光学勘测是观测驻留空间物体和空间态势感知的重要手段。随着天文技术和还原方法的应用&#xff0c;宽视场望远镜在发现和识别驻留空间物体方面做出了重大贡献。然而&#x…

2025年前端面试准备html篇

1.对html 语义化标签的理解 html语义化标签简单来说页面有良好的结构&#xff0c;使元素有含义便于理解。 优点可以使页面呈现出清晰的机构&#xff0c;有利于seo和搜索引擎抓取信息&#xff0c;便于团队的开发和管理。 常见的语义化标签有&#xff1a; <header> - 定义页…

【字节青训营-9】:初探字节微服务框架 Hertz 基础使用及进阶(下)

本文目录 一、Hertz中间件Recovery二、Hertz中间件跨资源共享三、Hertz 响应四、Hertz请求五、Hertz中间件Session 一、Hertz中间件Recovery Recovery中间件是Hertz框架预置的中间件&#xff0c;使用server.Default()可以默认注册该中间件&#xff0c;为Hertz框架提供panic回复…

因果推断与机器学习—用机器学习解决因果推断问题

Judea Pearl 将当前备受瞩目的机器学习研究戏谑地称为“仅限于曲线拟合”,然而,曲线拟合的实现绝非易事。机器学习模型在图像识别、语音识别、自然语言处理、蛋白质分子结构预测以及搜索推荐等多个领域均展现出显著的应用效果。 在因果推断任务中,在完成因果效应识别之后,需…

软件设计模式

目录 一.创建型模式 抽象工厂 Abstract Factory 构建器 Builder 工厂方法 Factory Method 原型 Prototype 单例模式 Singleton 二.结构型模式 适配器模式 Adapter 桥接模式 Bridge 组合模式 Composite 装饰者模式 Decorator 外观模式 Facade 享元模式 Flyw…

Linux 零拷贝技术

一、传统做法&#xff0c;经历“四次拷贝” 数据 1.读取到内核缓冲区 2.拷贝到用户缓冲区 3.写入到内核缓冲区 4.拷贝到网卡 使用 DMA&#xff0c;减少2次拷贝&#xff0c;还剩2次拷贝 DMA 负责硬盘到内核缓冲区和内核到网卡的传输。 CPU 仍需处理内核和用户缓冲区之间的数据…

【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;深度学习_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

利用Vue和javascript分别编写一个“Hello World”的定时更新

目录 一、利用Vue编写一个“Hello World”的定时更新&#xff08;1&#xff09;vue编码在Html文件中&#xff08;2&#xff09;vue编码在js文件中 二、利用javascript编写一个“Hello World”的定时更新 一、利用Vue编写一个“Hello World”的定时更新 &#xff08;1&#xff…