【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,一经查实,立即删除!

相关文章

Go运行Grule引擎实现计费规则管理

Go运行Grule引擎实现计费规则管理 github位置: https://github.com/hyperjumptech/grule-rule-engine # 安装grule模块 go get -u github.com/hyperjumptech/grule-rule-engineGrule的示例代码 示例位置: https://github.com/hyperjumptech/grule-rule-engine/tree/master/e…

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

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

Hive on Spark 的Pre-commit 测试

什么是 Pre-Commit 测试&#xff1f; Pre-Commit 测试是一种提交代码到主分支或共享代码库之前运行的一系列自动化测试&#xff0c;用于捕获代码中的潜在问题自动运行的测试流程。其目的是确保新提交的代码不会引入错误&#xff0c;破坏现有功能或降低代码质量。对于大型项目如…

android shader gl_Position是几个分量

在Android的OpenGL ES中&#xff0c;gl_Position是顶点着色器&#xff08;Vertex Shader&#xff09;的一个内置输出变量&#xff0c;它用于指定顶点在裁剪空间&#xff08;Clip Space&#xff09;中的位置。gl_Position是一个四维向量&#xff08;4-component vector&#xff…

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(6)

1.问题描述&#xff1a; 推送通知到手机&#xff0c;怎么配置拉起应用指定的页面&#xff1f; 解决方案&#xff1a; 1、如果点击通知栏打开默认Ability的话&#xff0c; actionType可以设置为0&#xff0c; 同时可以在.clickAction.data中&#xff0c;指定待跳转的page页面…

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;点击链接…

学习笔记039——SpringBoot整合Redis

文章目录 1、Redis 基本操作Redis 默认有 16 个数据库&#xff0c;使用的是第 0 个&#xff0c;切换数据库添加数据/修改数据查询数据批量添加批量查询删除数据查询所有的 key清除当前数据库清除所有数据库查看 key 是否存在设置有效期查看有效期 2、Redis 数据类型String追加字…

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

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

如何在 VPS 上使用 Git 设置自动部署

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 要了解 Git 的基本知识以及如何安装&#xff0c;请参考介绍教程。 本文将教你如何在部署应用程序时使用 Git。虽然有许多使用 Gi…

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 …

C#基础之方法

文章目录 1 方法1.1 定义方法1.2 参数传递1.2.1 按值传递参数1.2.2 按引用传递参数1.2.3 按输出传递参数1.2.4 可变参数 params1.2.5 具名参数1.2.6 可选参数 1.3 匿名方法1.3.1 Lambda 表达式1.3.1.1 定义1.3.1.2 常用类型1.3.1.3 Lambda 表达式与 LINQ1.3.1.4 Lambda 表达式的…

Unity——Toggle的状态监听处理

文章目录 前言一、单个Toggle的事件监听二、多个Toggle的事件监听注意事项 前言 在Unity中&#xff0c;Toggle 是一种用户界面&#xff08;UI&#xff09;元素&#xff0c;通常用于提供一个开关选项&#xff0c;允许用户选择开启或关闭某个特定的功能。Toggle 组件有一个 onVa…

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

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

LabVIEW实现UDP通信

目录 1、UDP通信原理 2、硬件环境部署 3、云端环境部署 4、UDP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 8、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利…

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili&#xff08;哔哩哔哩&#xff09;视频的完整和详细步骤如下&#xff0c;包括使用预编译二进制文件的安装方法&#xff1a; 1. 安装依赖 确保你的系统已安装 FFmpeg&…

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;并在性能方面产生显著的权衡。…

硬菜3道+馒头

硬菜3道 1、可乐鸡翅 》鸡翅滑刀酱油耗油胡椒粉盐》 搅拌腌制3-5分钟 》油锅&#xff0c;直到2面煎黄 》倒入可乐&#xff0c;到大火收汁&#xff0c;出锅 2、洋葱牛肉 》冻牛肉切薄酱油耗油胡椒粉盐 》手指摇匀 》加入生粉水&#xff0c;继续摇匀》直到粘稠 》油锅牛肉炒半熟&…