Maven 基础学习及使用

  • Maven
    • 1 Maven简介
      • 1.1 Maven模型
      • 1.2 仓库
    • 2 Maven安装配置
    • 3 Maven基本使用
      • 3.1 Maven 常用命令
      • 3.2 Maven 生命周期
    • 4 IDEA使用Maven
      • 4.1 IDEA配置Maven环境
      • 4.2 Maven 坐标详解
      • 4.3 IDEA 创建 Maven项目
      • 4.4 IDEA 导入 Maven项目
    • 5 依赖管理
      • 5.1 使用坐标引入jar包
      • 5.2 依赖范围

Maven


Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

  • 提供了一套标准化的项目结构

  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)

  • 提供了一套依赖管理机制

标准化的项目结构:

项目结构我们都知道,每一个开发工具(IDE)都有自己不同的项目结构,它们互相之间不通用。我再eclipse中创建的目录,无法在idea中进行使用,这就造成了很大的不方便,如下图:前两个是以后开发经常使用的开发工具

image-20210726153521381

而Maven提供了一套标准化的项目结构,所有的IDE使用Maven构建的项目完全一样,所以IDE创建的Maven项目可以通用。如下图右边就是Maven构建的项目结构。

标准化的构建流程:

如上图所示我们开发了一套系统,代码需要进行编译、测试、打包、发布,这些操作如果需要反复进行就显得特别麻烦,而Maven提供了一套简单的命令来完成项目构建。

依赖管理:

依赖管理其实就是管理你项目所依赖的第三方资源(jar包、插件)。如之前我们项目中需要使用JDBC和Druid的话,就需要去网上下载对应的依赖包(当前之前是老师已经下载好提供给大家了),复制到项目中,还要将jar包加入工作环境这一系列的操作。如下图所示

而Maven使用标准的 坐标 配置来管理各种依赖,只需要简单的配置就可以完成依赖管理。

如上图右边所示就是mysql驱动包的坐标,在项目中只需要写这段配置,其他都不需要我们担心,Maven都帮我们进行操作了。

市面上有很多构建工具,而Maven依旧还是主流构建工具,如下图是常用构建工具的使用占比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJ6XV89J-1691677377621)(assets/image-20210726155212733.png)]

1 Maven简介

Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

官网 :http://maven.apache.org/

通过上面的描述大家只需要知道Maven是一个工具即可。Apache 是一个开源组织,将来我们会学习很多Apache提供的项目。

1.1 Maven模型

  • 项目对象模型 (Project Object Model)
  • 依赖管理模型(Dependency)
  • 插件(Plugin)

如上图所示就是Maven的模型,而我们先看紫色框框起来的部分,他就是用来完成 标准化构建流程 。如我们需要编译,Maven提供了一个编译插件供我们使用,我们需要打包,Maven就提供了一个打包插件提供我们使用等。

上图中紫色框起来的部分,项目对象模型就是将我们自己抽象成一个对象模型,有自己专属的坐标,如下图所示是一个Maven项目:

依赖管理模型则是使用坐标来描述当前项目依赖哪儿些第三方jar包,如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4e2SUeJp-1691677377622)(assets/image-20210726161616034.png)]

上述Maven模型图中还有一部分是仓库。如何理解仓库呢?

1.2 仓库

大家想想这样的场景,我们创建Maven项目,在项目中使用坐标来指定项目的依赖,那么依赖的jar包到底存储在什么地方呢?其实依赖jar包是存储在我们的本地仓库中。而项目运行时从本地仓库中拿需要的依赖jar包。

仓库分类:

  • 本地仓库:自己计算机上的一个目录

  • 中央仓库:由Maven团队维护的全球唯一的仓库

    • 地址: https://repo1.maven.org/maven2/
  • 远程仓库(私服):一般由公司团队搭建的私有仓库

    今天我们只学习远程仓库的使用,并不会搭建。

当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:

  • 如果有,则在项目直接引用;

  • 如果没有,则去中央仓库中下载对应的jar包到本地仓库。

如果还可以搭建远程仓库,将来jar包的查找顺序则变为:

本地仓库 --> 远程仓库–> 中央仓库

2 Maven安装配置

  • 解压 apache-maven-3.6.1.rar 既安装完成

    image-20210726163219682

    建议解压缩到没有中文、特殊字符的路径下。如课程中解压缩到 D:\software 下。

    解压缩后的目录结构如下:

    • bin目录 : 存放的是可执行命令。mvn 命令重点关注。
    • conf目录 :存放Maven的配置文件。settings.xml 配置文件后期需要修改。
    • lib目录 :存放Maven依赖的jar包。Maven也是使用java开发的,所以它也依赖其他的jar包。
  • 配置环境变量 MAVEN_HOME 为安装路径的bin目录

    此电脑 右键 --> 高级系统设置 --> 高级 --> 环境变量

    在系统变量处新建一个变量 MAVEN_HOME

    Path 中进行配置

    打开命令提示符进行验证,出现如图所示表示安装成功

  • 配置本地仓库

    修改 conf/settings.xml 中的 为一个指定目录作为本地仓库,用来存储jar包。

  • 配置阿里云私服

    中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。

    修改 conf/settings.xml 中的 标签,为其添加如下子标签:

    <mirror>  <id>alimaven</id>  <name>aliyun maven</name>  <url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>          
    </mirror>
    

3 Maven基本使用

3.1 Maven 常用命令

  • compile :编译

  • clean:清理

  • test:测试

  • package:打包

  • install:安装

命令演示:

资料\代码\maven-project 提供了一个使用Maven构建的项目,项目结构如下:

image-20210726170404545

而我们使用上面命令需要在磁盘上进入到项目的 pom.xml 目录下,打开命令提示符

编译命令演示:

compile :编译

执行上述命令可以看到:

  • 从阿里云下载编译需要的插件的jar包,在本地仓库也能看到下载好的插件
  • 在项目下会生成一个 target 目录

同时在项目下会出现一个 target 目录,编译后的字节码文件就放在该目录下

清理命令演示:

mvn clean

执行上述命令可以看到

  • 从阿里云下载清理需要的插件jar包
  • 删除项目下的 target 目录

打包命令演示:

mvn package

执行上述命令可以看到:

  • 从阿里云下载打包需要的插件jar包
  • 在项目的 terget 目录下有一个jar包(将当前项目打成的jar包)

测试命令演示:

mvn test  

该命令会执行所有的测试代码。执行上述命令效果如下

安装命令演示:

mvn install

该命令会将当前项目打成jar包,并安装到本地仓库。执行完上述命令后到本地仓库查看结果如下:

3.2 Maven 生命周期

Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件

Maven 对项目构建的生命周期划分为3套:

  • clean :清理工作。
  • default :核心工作,例如编译,测试,打包,安装等。
  • site : 产生报告,发布站点等。这套声明周期一般不会使用。

同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。例如默认(default)生命周期如下:

当我们执行 install(安装)命令时,它会先执行 compile命令,再执行 test 命令,再执行 package 命令,最后执行 install 命令。

当我们执行 package (打包)命令时,它会先执行 compile 命令,再执行 test 命令,最后执行 package 命令。

默认的生命周期也有对应的很多命令,其他的一般都不会使用,我们只关注常用的:

4 IDEA使用Maven

以后开发中我们肯定会在高级开发工具中使用Maven管理项目,而我们常用的高级开发工具是IDEA,所以接下来我们会讲解Maven在IDEA中的使用。

4.1 IDEA配置Maven环境

我们需要先在IDEA中配置Maven环境:

  • 选择 IDEA中 File --> Settings

  • 搜索 maven

  • 设置 IDEA 使用本地安装的 Maven,并修改配置文件路径

4.2 Maven 坐标详解

什么是坐标?

  • Maven 中的坐标是资源的唯一标识
  • 使用坐标来定义项目或引入项目中需要的依赖

Maven 坐标主要组成

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
  • artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
  • version:定义当前项目版本号

如下图就是使用坐标表示一个项目:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P8NjzOix-1691677377623)(assets/image-20210726174718176.png)]

注意:

  • 上面所说的资源可以是插件、依赖、当前项目。
  • 我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。

4.3 IDEA 创建 Maven项目

  • 创建模块,选择Maven,点击Next

  • 填写模块名称,坐标信息,点击finish,创建完成

    创建好的项目目录结构如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PW8a9Y7e-1691677377624)(assets/image-20210726175244826.png)]

  • 编写 HelloWorld,并运行

4.4 IDEA 导入 Maven项目

大家在学习时可能需要看老师的代码,当然也就需要将老师的代码导入到自己的IDEA中。我们可以通过以下步骤进行项目的导入:

  • 选择右侧Maven面板,点击 + 号

  • 选中对应项目的pom.xml文件,双击即可

  • 如果没有Maven面板,选择

    View --> Appearance --> Tool Window Bars

可以通过下图所示进行命令的操作:

image-20210726182902961

配置 Maven-Helper 插件

  • 选择 IDEA中 File --> Settings

  • 选择 Plugins

  • 搜索 Maven,选择第一个 Maven Helper,点击Install安装,弹出面板中点击Accept

  • 重启 IDEA

安装完该插件后可以通过 选中项目右键进行相关命令操作,如下图所示:

5 依赖管理

5.1 使用坐标引入jar包

使用坐标引入jar包的步骤:

  • 在项目的 pom.xml 中编写 标签

  • 在 标签中 使用 引入坐标

  • 定义坐标的 groupId,artifactId,version

  • 点击刷新按钮,使坐标生效

注意:

  • 具体的坐标我们可以到如下网站进行搜索
  • https://mvnrepository.com/

快捷方式导入jar包的坐标:

每次需要引入jar包,都去对应的网站进行搜索是比较麻烦的,接下来给大家介绍一种快捷引入坐标的方式

  • 在 pom.xml 中 按 alt + insert,选择 Dependency

  • 在弹出的面板中搜索对应坐标,然后双击选中对应坐标

  • 点击刷新按钮,使坐标生效

自动导入设置:

上面每次操作都需要点击刷新按钮,让引入的坐标生效。当然我们也可以通过设置让其自动完成

  • 选择 IDEA中 File --> Settings

  • 在弹出的面板中找到 Build Tools

  • 选择 Any changes,点击 ok 即可生效

5.2 依赖范围

通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。

如下图所示给 junit 依赖通过 scope 标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。

那么 scope 都可以有哪些取值呢?

依赖范围编译classpath测试classpath运行classpath例子
compileYYYlogback
test-Y-Junit
providedYY-servlet-api
runtime-YYjdbc驱动
systemYY-存储在本地的jar包
  • compile :作用于编译环境、测试环境、运行环境。
  • test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值
  • provided :作用于编译环境、测试环境。我们后面会学习 servlet-api ,在使用它时,必须将 scope 设置为该值,不然运行时就会报错
  • runtime : 作用于测试环境、运行环境。jdbc驱动一般将 scope 设置为该值,当然不设置也没有任何问题

注意:

  • 如果引入坐标不指定 scope 标签时,默认就是 compile 值。以后大部分jar包都是使用默认值。

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

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

相关文章

STM32的电动自行车信息采集上报系统(学习)

摘要 针对电动自行车实时监管不便的问题&#xff0c;设计了一种基于STM32的电动自行车信息采集系统&#xff0c;通过获取电池、位置和行驶状态信息并上报到服务器中&#xff0c;实现实时监管。 通过多路串口请求电池、行驶状态和位置信息&#xff0c;以并发方式进行数据接收、…

块、行内块水平垂直居中

1.定位实现水平垂直居中 <div class"outer"><div class"test inner1">定位实现水平垂直居中</div></div><style>.outer {width: 300px;height: 300px;border: 1px solid gray;margin: 100px auto 0;position: relative;}.te…

Redis集群(三十七)

部署搭建Redis主从复制、哨兵模式、集群部署 目录 一、Redis主从复制 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;作用 &#xff08;三&#xff09;缺点 &#xff08;四&#xff09;流程 &#xff08;五&#xff09;搭建 二、Redis哨兵模式 &#xff0…

软件测试基础篇——MySQL

MySQL 1、数据库技术概述 数据库database&#xff1a;存放和管理各种数据的仓库&#xff0c;操作的对象主要是【数据data】&#xff0c;科学的组织和存储数据&#xff0c;高效的获取和处理数据SQL&#xff1a;结构化查询语言&#xff0c;专为**关系型数据库而建立的操作语言&…

ORB-SLAM2第二节---双目地图初始化

比起单目初始化&#xff0c;而双目实现地图的初始化非常简单&#xff0c;只需要一帧&#xff08;左右目图像&#xff09;即可完成初始化。 行特征点统计。考虑用图像金字塔尺度作为偏移量&#xff0c;在当前点上下正负偏移量&#xff08;r)内的纵坐标值都认为是匹配点可能存在…

【MySQL】并发执行事务可能存在的问题, 事务的四种隔离级别

文章目录 前言一、并发执行事务可能存在的问题1, 脏读问题2, 不可重复读3, 幻读 二、MySQL 的四种隔离级别1, READ UNCOMMITTED 读未提交2, READ COMMITTED 读已提交3, REPEATABLE READ 可重复读 (MySQL 的默认事务隔离级别)4, SERIALIZABLE 串行化 总结 前言 各位读者好, 我是…

web会话跟踪以及JWT响应拦截机制

目录 JWT 会话跟踪 token 响应拦截器 http是无状态的&#xff0c;登录成功后&#xff0c;客户端就与服务器断开连接&#xff0c;之后再向后端发送请求时&#xff0c;后端需要知道前端是哪个用户在进行操作。 JWT Json web token (JWT), 是为了在网络应用环境间传递声明而…

WebAPIs 第三天

DOM 事件进阶 事件流事件委托其他事件元素尺寸与位置 一.事件流 事件流与两个阶段说明事件捕获事件冒泡阻止冒泡解绑事件 1.1 事件流与两个阶段说明 ① 事件流&#xff1a;指的是事件完整执行过程中的流动路径 ② 事件流分为捕获阶段和冒泡阶段 1.2 事件捕获 从DOM根元素…

探讨uniapp的生命周期问题

在uniapp中,生命周期函数分为应用生命周期函数、页面生命周期函数和组件生命周期函数. 1应用声明周期 应用生命周期函数只能在 App.vue 中监听有效&#xff0c;在其他页监听无效。 onLaunch&#xff1a;当uni-app 初始化完成时触发&#xff08;全局只触发一次&#xff09;on…

AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理

大家好&#xff0c;我是风雨无阻。 本文适合人群&#xff1a; 想要了解AI绘图基本原理的朋友。 对Stable Diffusion AI绘图感兴趣的朋友。 本期内容&#xff1a; Stable Diffusion 能做什么 什么是扩散模型 扩散模型实现原理 Stable Diffusion 潜扩散模型 Stable Diffu…

VMware Workstation中安装了Windows7系统但是VMware Tools选项为灰色及无法安装的解决方法

一、问题描述 当我们在使用VMware Workstation安装好了Windows7系统后;该安装好的Windows7系统并不能自动适配WMware的界面,只能在中间显示很小的一部分内容;此时我们就需要给Windows7系统安装VMware Tools工具; 问题一:WMware中的【安装VMware Tools】选项则是灰色的无法…

邻接表创建无向表(C++ 代码)

#include<iostream>//邻接表创建无向表 #define MVNum 100 using namespace std; typedef char VerTexType; typedef struct Arcnode//边节点 {int adjvex;//该边所指向的顶点的位置struct Arcnode* nextarc;//指向下一条边的指针 }Arcnode; typedef struct vnode//顶点节…

【瑞吉外卖】Linux学习

Linux常用命令 Linux命令初体验 Linux的命令都是由一个或几个单词的缩写构成的 命令对应英文作用lslist查看当前目录下的内容pwdprint work directory查看当前所在目录cd [目录名]change directory切换目录touch [文件名]touch如果文件不存在&#xff0c;新建文件mkdir [目录…

软件测试基础篇——LAMP环境搭建

LAMP 1、Linux系统的其他命令 find命令&#xff1a;在目录下查找文件 ​ 格式一&#xff1a;find 路径 参数 文件名 ​ 路径&#xff1a;如果没有指定路径&#xff0c;默认是在当前目录下 ​ 参数&#xff1a;-name 根据文件名来查找&#xff0c;区分大小写&#xff1b; -…

【多模态】25、ViLT | 轻量级多模态预训练模型(ICML2021)

文章目录 一、背景二、ViLT 方法三、效果3.1 数据集3.2 分类任务 VQA 和 NLVR23.3 Image Retrieval 论文&#xff1a;ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision 代码&#xff1a;https://github.com/dandelin/vilt 出处&#xff1a;…

JVM相关知识

文章目录 JMM主内存与工作内存工作内存与主内存的交互的8种方法JVM内存结构运行时数据区 类加载机制类加载器类加载分类获取类加载器的途径双亲委派机制双亲委派的机制的弊端是什么?怎么打破双亲委派机制代码热替换、模块热部署自定义类加载器对类加载器的引用 String底层stri…

sentinel核心流程源码解析

sentinel的处理槽(ProcessorSlot) 可以说&#xff0c;sentinel实现的各种功能就是由各处理槽完成的 ,ProcessorSlot定义了四个方法&#xff1a; 当进入该处理槽时触发该方法 处理完 entry方法之后触发该方法 退出该处理槽时触发该方法 exit方法处理完成时触发该方法 sentinel的…

枚举缓存工具

此文章为笔记&#xff0c;为阅读其他文章的感受、补充、记录、练习、汇总&#xff0c;非原创&#xff0c;感谢每个知识分享者。 文章目录 1. 背景2. 枚举缓存3. 样例展示4. 性能对比5. 总结 本文通过几种样例展示如何高效优雅的使用java枚举消除冗余代码。 1. 背景 枚举在系统…

一文读懂HTML

文章目录 HTML的历史HTML的作用HTML的基本语言 HTML的历史 HTML&#xff08;HyperText Markup Language&#xff09;的历史可以追溯到20世纪90年代早期&#xff0c;它是互联网发展的重要里程碑之一。以下是HTML的历史概述&#xff1a; 早期阶段&#xff08;1980年代末 - 1990年…

创新引领城市进化:人工智能和大数据塑造智慧城市新面貌

人工智能和大数据等前沿技术正以惊人的速度融入智慧城市的方方面面&#xff0c;为城市的发展注入了强大的智慧和活力。这些技术的应用不仅令城市管理更高效、居民生活更便捷&#xff0c;还为可持续发展和创新奠定了坚实的基础。 在智慧城市中&#xff0c;人工智能技术正成为城市…