【Maven】功能和核心概念

news2024/11/30 0:20:23

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.coloradmin.cn/o/2250094.html

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

相关文章

神经网络归一化方法总结

在深度学习中&#xff0c;归一化 是提高训练效率和稳定性的关键技术。以下是几种常见的神经网络归一化方法的总结&#xff0c;包括其核心思想、适用场景及优缺点。 四种归一化 特性Batch NormalizationGroup NormalizationLayer NormalizationInstance Normalization计算维度…

视频汇聚平台Liveweb国标GB28181视频平台监控中心设计

在现代安防视频监控领域&#xff0c;Liveweb视频汇聚平台以其卓越的兼容性和灵活的拓展能力&#xff0c;为用户提供了一套全面的解决方案。该平台不仅能够实现视频的远程监控、录像、存储与回放等基础功能&#xff0c;还涵盖了视频转码、视频快照、告警、云台控制、语音对讲以及…

hubu新星杯实践能力赛模拟赛web/Misc-wp

ez_eval <?php highlight_file(__FILE__); error_reporting(0);$hubu $_GET[hubu];eval($hubu);?> 先进行代码审计&#xff0c;GET传参hubu&#xff0c;并执行命令&#xff0c;没有任何绕过&#xff0c;放开手脚去做 payload: ?hubusystem(cat /f*); #直接rcerc…

【前端】跨域问题与缓存

报错如下&#xff1a; 原因&#xff1a; 浏览器 缓存跨域&#xff0c;顾名思义是由于浏览器的缓存机制导致的一种跨域情况。这种跨域一般会出现在浏览器通过一些无视跨域的标签和css(如img、background-image)缓存了一些图片资源之后&#xff0c;当再次发起图片请求时&#xff…

抓包之OSI七层模型以及TCPIP四层模型

写在前面 本文看下OSI七层模型以及TCP/IP四层网络模型&#xff0c;并尝试使用wireshark进行验证。 1&#xff1a;OSI七层网络模型和TCP/IP四层模型 全称&#xff1a;open system interconnection。 需要注意OSI七层模型最终是没有落地的&#xff0c;最终落地的是与之类似的…

#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现02-永恒之蓝漏洞

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

MTK 展锐 高通 sensorhub架构

一、MTK平台 MTK框架可以分为两部分&#xff0c;AP和SCP。 AP是主芯片&#xff0c;SCP是协处理器&#xff0c;他们一起工作来处理sensor数据。 SCP 是用来处理sensor和audio相关功能和其他客制化需求的一个协处理理器&#xff0c;MTK SCP选择freeRTOS作为操作系统&#xff0c…

视觉语言模型(VLM)学习笔记

目录 应用场景举例 VLM 的总体架构包括&#xff1a; 深度解析&#xff1a;图像编码器的实现 图像编码器&#xff1a;视觉 Transformer 注意力机制 视觉-语言投影器 综合实现 训练及注意事项 总结 应用场景举例 基于文本的图像生成或编辑&#xff1a;你输入 “生成一张…

[AutoSar]BSW_Diagnostic_007 BootLoader 跳转及APP OR boot response 实现

目录 关键词平台说明背景一、Process Jump to Bootloader二、相关函数和配置2.1 Dcm_GetProgConditions()2.2 Dcm_SetProgConditions() 三、如何实现在APP 还是BOOT 中对10 02服务响应3.1 配置3.2 code 四、报文五、小结 关键词 嵌入式、C语言、autosar、OS、BSW、UDS、diagno…

如何启用本机GPU硬件加速猿大师播放器网页同时播放多路RTSP H.265 1080P高清摄像头RTSP视频流?

目前市面上主流播放RTSP视频流的方式是用服务器转码方案&#xff0c;这种方案的好处是兼容性更强&#xff0c;可以用于不同的平台&#xff0c;比如&#xff1a;Windows、Linux或者手机端&#xff0c;但是缺点也很明显&#xff1a;延迟高、播放高清或者同时播放多路视频视频容易…

设置ip和代理DNS的WindowsBat脚本怎么写?

今天分享一个我们在工作时&#xff0c;常见的在Windows中通过批处理脚本&#xff08;.bat 文件&#xff09;来设置IP地址、代理以及DNS 相关配置的示例&#xff0c;大家可以根据实际需求进行修改调整。 一、设置静态IP地址脚本示例 以下脚本用于设置本地连接&#xff08;你可…

深度学习-49-AI应用实战之基于HyperLPR的车牌识别

文章目录 1 车牌识别系统1.1 识别原理1.1.1 车牌定位1.1.2 字符识别2 实例应用2.1 安装hyperlpr32.2 识别结果2.3 可视化显示2.4 结合streamlit3 附录3.1 PIL.Image转换成OpenCV格式3.2 OpenCV转换成PIL.Image格式3.3 st.image嵌入图像内容3.4 参考附录1 车牌识别系统 车牌识别…

基于深度学习的手势识别算法

基于深度学习的手势识别算法 概述算法原理核心逻辑效果演示使用方式参考文献 概述 本文基于论文 [Simple Baselines for Human Pose Estimation and Tracking[1]](ECCV 2018 Open Access Repository (thecvf.com)) 实现手部姿态估计。 手部姿态估计是从图像或视频帧集中找到手…

【Linux】-操作系统

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;深入代码世界&#xff0c;了解掌握 Linux 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​​ 一、冯•诺依曼架构&#xff…

2024最新python使用yt-dlp

2024最新python使用yt-dlp下载YT视频 1.获取yt的cookie1&#xff09;google浏览器下载Get cookies.txt LOCALLY插件2&#xff09;导出cookie 2.yt-dlp下载[yt-dlp的GitHub地址](https://github.com/yt-dlp/yt-dlp?tabreadme-ov-file)1&#xff09;使用Pycharm(2024.3)进行代码…

Mybatis集成篇(一)

Spring 框架集成Mybatis 目前主流Spring框架体系中&#xff0c;可以集成很多第三方框架&#xff0c;方便开发者利用Spring框架机制使用第三方框架的功能。就例如本篇Spring集成Mybatis 简单集成案例&#xff1a; Config配置&#xff1a; Configuration MapperScan(basePack…

C51相关实验

C51相关实验 LED (P2 / 0~7)蜂鸣器 (P2^5)数码管 (P0 0~7 段 &#xff0c;P2 2~4 位)独立按键 &#xff08;P3^1 P3^0 P3^2 P3^3&#xff09;直流电机 (J47 5v 01~04)综合实验矩阵按键 (P1组 0~7)LED点阵 LED (P2 / 0~7) //功能&#xff1a;1.让开发板的LED全亮&#xff0c;2,…

C++语法·叭

阁下何不乘风起&#xff0c;扶摇直上九万里。 qi fei 目录 内存管理 分区介绍 1.栈区&#xff1a; 2.内存映射段&#xff1a; 3.堆&#xff1a; 4.数据段&#xff1a; 5.代码段&#xff1a; 补充&#xff1a; C内存管理&#xff08;简略回忆&#xff09; C内存…

数据库期末复习题库

1. Mysql日志功能有哪些? 记录日常操作和错误信息&#xff0c;以便了解Mysql数据库的运行情况&#xff0c;日常操作&#xff0c;错误信息和进行相关的优化。 2. 数据库有哪些备份方法 完全备份&#xff1a;全部都备份一遍表备份&#xff1a;只提取数据库中的数据&#xff0…

矩阵重新排列——rot90函数

通过 r o t 90 rot90 rot90函数可以将矩阵进行旋转 用法&#xff1a; r o t 90 ( a , k ) rot90(a,k) rot90(a,k)将矩阵 a a a按逆时针方向旋转 k 9 0 ∘ k\times90^\circ k90∘