【Maven】功能和核心概念

1. 什么是Maven

1.1 Maven的概念

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建依赖管理

1.2 为什么要使用Maven?

  1. 在项目开发中,我们需要引用各种 jar 包,引用的 jar 包可能有几十个乃至上百个,每个都要到其官网去下载,而且每个 jar 包都需要手动引入到工程目录,期间会经常遇到 jar 包冲突版本冲突等。Maven 可以自动下载 jar 包及依赖包添加到项目中,大大减轻了工作负担。
  2. Java 文件需要编译成二进制字节码文件,我们可以借助各种集成开发工具完成,如 IDEA 可以将代码即时编译。但有时候我们需要多个模块同时编译,就必须要借助于 Maven 工具了。
  3. 每个项目或模块开发过程中都可能会有 bug,因此写完了代码,还要写一些单元测试,然后一个个的运行来检验代码质量,Maven 提供了专门的测试插件来实施测试
  4. 我们需要把代码与各种配置文件、资源整合到一起,定型打包。如果是 web 项目,还需要将其发布到服务器进行调用,这些都可以通过 Maven 轻松搞定。

1.3 项目的构建过程

构建(build)是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。
请添加图片描述

构建过程的几个主要环节:

  1. 清理:删除以前的编译结果,为重新编译做好准备。
  2. 编译:将 Java 源程序编译为字节码文件。
  3. 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  4. 报告:在每一次测试后以标准的格式记录和展示测试结果。
  5. 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应 war 包。
  6. 安装:在 Maven 环境下特指将 jar 包安装到本地仓库中。这样 jar 包项目就可以被其他的 Maven 项目通过依赖的方式引入。
  7. 部署:将 jar 包部署到私服上,其他开发人员就可以从公司私服下载并安装到本地仓库。

1.4 Maven的两大核心功能

1.4.1 项目构建

对项目进行编译、测试、打包、部署等构建。

1.4.2 依赖管理

对 jar 包的统一管理,Maven 提供中央仓库、私服、本地仓库来解决 jar 包的依赖和相关依赖的下载。在项目中使用 标签引入依赖后,Maven 会从远程仓库或本地仓库获取对应的 jar 包并添加到当前项目中。

如下图所示,包括蓝、黄两个部分分别对应着依赖管理项目构建两大核心功能:
请添加图片描述

2. Maven的核心概念

2.1 什么是POM

POM(Project Object Model)项目对象模型,它是 Maven 的核心组件,是 Maven 中的基本工作单元。它是一个 xml 文件,以 pom.xml 文件方式存在于项目的根目录中。POM 不仅包含有关项目的信息及 Maven 用于构建项目的各种配置的详细信息,还包含目标和插件。

pom.xml 文件举例:

<!--添加父工程的引用-->
<parent><groupId>com.bjpowernode.xiaomi</groupId><artifactId>xiaomi-parent</artifactId><version>0.0.1-SNAPSHOT</version>
</parent><!--本项目的身份证号gav-->
<groupId>com.bjpowernode</groupId>
<artifactId>springmvc_006_ssm</artifactId>          
<version>1.0.0</version>
<!--打包方式-->
<packaging>war</packaging><!--集中定义依赖版本号,使用属性-->
<properties><!--mysql驱动的依赖--><mysql.version>5.1.32</mysql.version>
</properties><!--添加依赖-->
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency>            
</dependencies><build><!--聚合工程--><modules><module>xiaomi-manager-pojo</module><module>xiaomi-manager-mapper</module><module>xiaomi-manager-service</module><module>xiaomi-manager-web</module></modules><!--插件配置--><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>17</source><target>17</target><encoding>UTF-8</encoding></configuration></plugin></plugins><!--指定配置文件识别路径--><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes></resource></resources>
</build>

2.2 什么是约定的目录结构

Maven 项目约定好了目录结构,所有的 Maven 项目都必须依照这个规范。主要的目的是将项目的源码文件、测试代码和资源文件完全分开,便于项目管理和扩展
在这里插入图片描述

附:

1、如何理解 Maven 将源码和测试代码分开了?

如下图代码所示,就是将业务代码和测试代码杂糅在一起了:

请添加图片描述

2、文件夹的属性

在 Maven 项目中,目录结构已经定义好,并且不同的目录的属性也已经定义好了。

请添加图片描述

2.3 什么是坐标GAV

也称为 GAV 定位。使用三个标签来唯一定位 jar 资源,即 groupId、artifactId 和 version坐标是资源的唯一定位,创建项目时定义 GAV 名称,引用项目时使用 GAV 名称。相当于项目的身份证号。

  1. groupId组织名称,一般是公司域名的倒写,如 com.myphoenix
  2. artifactId项目名称,如 big-marketing-lxx
  3. version版本编号,如 1.0-SNAPSHOT(开发时的临时版本号)、5.2.5.RELEASE(发布版本)

2.4 什么是仓库

存放 jar 包的位置。Maven 中所有的 jar 包都在仓库中。仓库分为本地仓库和远程仓库。

2.4.1 本地仓库

  • 本地仓库存储在本地机器上,默认存放在~.m2\repository中,为本机上的所有 Maven 工程服务。
  • 可以通过 Maven 的配置文件 Maven_home/conf/settings.xml 修改本地仓库所在的目录。~ 是用户的主目录,Windows 系统中是c:/user/用户名
    请添加图片描述

注:结合仓库来看,GAV 实际上表现为一级级的目录。

1、在项目的 pom.xml 文件中引入 MySQL 依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version>
</dependency>

2、查看本地仓库配置:

请添加图片描述

3、打开本地仓库:

C:\Softwares\Developer_Kits\apache-maven-3.8.8\repository\mysql\mysql-connector-java\8.0.22

请添加图片描述

由上图可以看到,在 pom.xml 文件中,MySQL 依赖的 GAV 3 个标签对应了 3 层目录

2.4.2 远程仓库

远程仓库包括:

  • 为全世界范围内的开发人员提供服务的中央仓库
  • 为全世界范围内某些特定的用户提供服务的中央仓库镜像
  • 为本公司提供服务自己架设的私服

中央仓库是 Maven 默认的远程仓库,其地址是 http://repo.maven.apache.org/maven2/,中央仓库包含了绝大多数流行的开源 Java 构件,以及源码、作者信息、许可证信息等。一般来说,简单的 Java 项目依赖的构件都可以在这里下载得到。

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它先请求私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。
请添加图片描述

程序员常用的一个仓库:http://mvnrepository.com/

请添加图片描述

2.5 什么是依赖

依赖就是 jar 包。

  • 所有的资源都是以 GAV 的形式进行定义的,也是通过 GAV 来添加引用。
  • <dependencies> 大标签中,通过子标签 <dependency> 指定 GAV 进行引用。

2.6 什么是生命周期

对应项目构建的过程,如下图:
请添加图片描述

构建项目时按照生命周期顺序构建,每一个阶段都有特定的插件来完成。无论我们要进行哪个阶段的构建,直接执行相应的命令即可,无需担心它前面的阶段是否构建,Maven 都会自动构建,也就是说都是从这个生命周期的最初阶段开始的。

使用 Intellij IDEA 后,生命周期要调用的命令被集成化一些按钮,只需要双击即可调用相应的插件来运行:
请添加图片描述

生命周期对应的 Maven 命令:

  1. mvn clean:清理。会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除。
  2. mvn compile:编译主程序。会在当前目录下生成一个 target 目录,里边存放编译主程序之后生成的字节码文件。
  3. mvn test-compile:编译测试程序。会在当前目录下生成一个 target 目录,里边存放编译测试程序之后生成的字节码文件。
  4. mvn test:测试。会生成一个目录 surefire-reports,保存测试结果。
  5. mvn package:打包主程序。会编译、编译测试、测试,并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包。
  6. mvn install:安装主程序。会将本工程打包,并且按照本工程的坐标保存到本地仓库中。
  7. mvn deploy:部署主程序。部署到私服仓库中。

2.7 什么是插件

Maven 本质上是一个插件框架,插件就是集成化的功能。它的核心并不执行任何具体的构建任务,所有任务都交给插件来完成,例如编译源代码是由 maven-compiler-plugin 完成的。

进一步说,每个任务对应了一个插件目标,每个插件会有一个或者多个目标,例如 maven-compiler-plugin 的compile 目标用来编译位于 src/main/java/ 目录下的主源码,testCompile 目标用来编译位于 src/test/java/ 目录下的测试源码。

Maven 支持极简化的插件添加,在 <plugins> 大标签中添加 <plugin> 子标签引用插件:

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

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

相关文章

企业网站面临的爬虫攻击及安全防护策略

在当今数字化时代&#xff0c;企业网站不仅是展示企业形象的窗口&#xff0c;更是进行商业活动的重要平台。然而&#xff0c;企业网站在日常运营中面临着多种类型的爬虫攻击&#xff0c;这些攻击不仅会对网站的正常访问造成影响&#xff0c;还可能窃取敏感数据&#xff0c;给企…

vue3 + vite + antdv 项目中自定义图标

前言&#xff1a; 去iconfont-阿里巴巴矢量图标库 下载自己需要的icon图标&#xff0c;下载格式为svg&#xff1b;项目中在存放静态资源的文件夹下 assets 创建一个存放svg格式的图片的文件夹。 步骤&#xff1a; 1、安装vite-plugin-svg-icons npm i vite-plugin-svg-icons …

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本。 原因是&#xff1a;当前操作系统版本为Windows Server 2016 Standard版本&#xff0c;其自带的Microsoft .NET Framework 版本为4.6太低&#xff0c;不满足要求。 根据报错的提示&#xff0c;点击链接…

基于yolov8、yolov5的铝材缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;铝材缺陷检测在现代工业生产和质量管理中具有重要意义&#xff0c;不仅能帮助企业实时监控铝材质量&#xff0c;还为智能化生产系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的铝材缺陷检测模型&#xff0c;该模型使用了大量包含…

Goland或Idea启动报错

Goland或Idea启动不了 报错如图&#xff1a; 原因&#xff1a;破解导致 解决方案 环境变量中有关Goland的全部删除

ceph手动部署

ceph手动部署 一、 节点规划 主机名IP地址角色ceph01.example.com172.18.0.10/24mon、mgr、osd、mds、rgwceph02.example.com172.18.0.20/24mon、mgr、osd、mds、rgwceph03.example.com172.18.0.30/24mon、mgr、osd、mds、rgw 操作系统版本&#xff1a; Rocky Linux release …

PMP–一、二、三模、冲刺–分类–8.质量管理

文章目录 技巧五、质量管理 一模8.质量管理--质量管理计划--质量管理计划包括项目采用的质量标准&#xff0c;到底有没有满足质量需求&#xff0c;看质量标准即可。6、 [单选] 自项目开始以来&#xff0c;作为项目经理同事的职能经理一直公开反对该项目&#xff0c;在讨论项目里…

C语言——库函数

常用的函数 https://cplusplus.com/reference/ 没事儿多看看 1 数学函数 #include <math.h> #include <stdio.h> int main() {printf("%lf\n", sqrt(4));//开平方根——>double类型printf("%lf\n", pow(2, 10));//求几次方的——>do…

纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架

前言​ 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库&#xff0c;如 ​​OpenCV​​ 或 ​​​dlib​​​&#xff0c;但通过 ​​​cgo​​​ 调用 C 程序会引入巨大的延迟&#xff0c;并在性能方面产生显著的权衡。…

27 基于51单片机的方向盘模拟系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;采用两个MPX4115压力传感器作为两路压力到位开关电路&#xff0c; 采用滑动变阻器连接数模转换器模拟重力加速度传感器电路&#xff1b; 一个按键控制LED灯的点亮与…

win10环境mysql8.4免安装版配置

下载后解压 dos管理员&#xff0c;进入bin目录 mysqld -install net start mysql 出现错误&#xff0c;服务无法启动 MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助。 services.msc&#xff0c;查看服务…

centos更换源文件,换源,替换源

期初怎么折腾就是不行&#xff0c;换了源也是不能使用的&#xff0c;最后发现不是换的源不行&#xff0c;而是之前的源文件不行&#xff0c;然后给所有的源文件在yum源统一放在了bak目录下&#xff0c;随后我们再去下载安装源文件。 您将yum源下载之后&#xff0c;先将您的其他…

网络安全之IP伪造

眼下非常多站点的涉及存在一些安全漏洞&#xff0c;黑客easy使用ip伪造、session劫持、xss攻击、session注入等手段危害站点安全。在纪录片《互联网之子》&#xff08;建议搞IT的都要看下&#xff09;中。亚伦斯沃茨&#xff08;真实人物&#xff0c;神一般的存在&#xff09;涉…

蓝牙定位的MATLAB仿真程序|基于信号强度的定位,平面、四个蓝牙基站(附源代码)

这段代码通过RSSI信号强度实现了蓝牙定位&#xff0c;展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。它涵盖了信号衰减模型、距离计算和最小二乘法估计等基本概念。通过图形化输出&#xff0c;用户可以直观地看到真实位置与估计位置的关系。 文章目录 蓝牙定位原…

机器学习算法(六)---逻辑回归

常见的十大机器学习算法&#xff1a; 机器学习算法&#xff08;一&#xff09;—决策树 机器学习算法&#xff08;二&#xff09;—支持向量机SVM 机器学习算法&#xff08;三&#xff09;—K近邻 机器学习算法&#xff08;四&#xff09;—集成算法 机器学习算法&#xff08;五…

Attention显存统计与分析

Attention显存估计 简单的Attention函数 import torch import torch.nn as nn import einops class Attention(nn.Module):def __init__(self, dim, num_heads8, qkv_biasFalse, qk_scaleNone, attn_drop0., proj_drop0.):super().__init__()self.num_heads num_headshead_d…

Spring系列之批处理Spring Batch介绍

概述 官网&#xff0c;GitHub A lightweight, comprehensive batch framework designed to enable the development of robust batch applications vital for the daily operations of enterprise systems. 执行流程 实战 假设有个待处理的任务&#xff0c;如文件batch-tes…

[保姆式教程]使用labelimg2软件标注定向目标检测数据和格式转换

定向目标检测是一种在图像或视频中识别和定位对象的同时&#xff0c;还估计它们方向的技术。这种技术特别适用于处理有一定旋转或方向变化的对象&#xff0c;例如汽车、飞机或文本。定向目标检测器的输出是一组旋转的边界框&#xff0c;这些框精确地包围了图像中的对象&#xf…

Socket编程:UDP网络编程项目

目录 一、回显服务器 二、翻译器 三、聊天室 一、回显服务器 项目介绍&#xff1a;使用UDPIPv4协议进行Linux网络编程&#xff0c;实现回显服务器和客户端 功能介绍&#xff1a;客户端发送数据&#xff0c;经过服务端再返回到客户端&#xff0c;输出数据 源代码&#xff1…

HarmonyOS4+NEXT星河版入门与项目实战(24)------Stage模型

文章目录 1、概念2、配置文件1、全局配置文件2、模块配置文件3、UIAbility生命周期1、图文归纳2、生命周期方法入口4、页面生命周期1、图文描述1、概念 2、配置文件 1、全局配置文件 2、模块配置文件 统一修改配置文件技巧:点击任意json 文件,选择 Open editor ,在显示的列表…