Maven入门及其使用

news2025/1/16 8:12:23

目录

一、Maven入门

1.1 初识Maven

1.2 Maven的作用

1.2.1 依赖管理

1.2.2 统一项目结构

1.2.3 项目构建

1.3 Maven坐标

1.4 Maven仓库

1.4.1 Maven仓库概述

二、Maven的下载与安装

2.1 安装步骤

2.1.1 解压安装(建议解压到没有中文、特殊字符的路径下。)

2.1.2 配置本地仓库

2.1.3 配置阿里云私服

2.1.4 配置Maven环境变量

三、IDEA集成Maven

3.1 配置Maven环境

3.1.1 当前工程设置

3.1.2 全局设置

3.2 创建maven项目

3.3 依赖管理

1、排除依赖

2、依赖范围

四、 Maven生命周期


一、Maven入门

1.1 初识Maven

Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具

1.2 Maven的作用

1.2.1 依赖管理

方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题

当使用maven进行项目依赖(jar包)管理,则很方便的可以解决这个问题。 我们只需要在maven项目 的pom.xml文件中,添加一段如下图所示的配置即可实现

1.2.2 统一项目结构

提供标准、统一的项目结构

具体的统一结构如下:

1.2.3 项目构建

maven提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式

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

综上所述,可以得到一个结论:Maven是一款管理和构建java项目的工具

1.3 Maven坐标

坐标就是资源(jar包)的唯一标识,通过坐标可以定位到所需资源(jar包)位置, 使用坐标来定义项目或引入项目中需要的依赖

下图就是一个maven坐标,maven坐标由<groupId>、<artifactId>、<version>三个标签组成

groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)

artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)

version:定义当前项目版本号 

<!--            邮件发送  -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
                <version>3.2.1</version>
            </dependency>

1.4 Maven仓库

之前我们项目中需要jar包时,直接就把jar包复制到项目下的lib目录,而现在书写在pom.xml文件中 的坐标又是怎么能找到所要的jar包文件的呢?

答案:Maven仓库

1.4.1 Maven仓库概述

仓库:用于存储资源,管理各种jar包 仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(就是jar包)和插件

Maven仓库分为:

本地仓库:自己计算机上的一个目录(用来存储jar包)

中央仓库:由Maven团队维护的全球唯一的。仓库地址:Central Repository: (maven.org)

远程仓库(私服):一般由公司团队搭建的私有仓库

当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包 如果有,则在项目直接引用 如果没有,则去中央仓库中下载对应的jar包到本地仓库 如果还可以搭建远程仓库(私服),将来jar包的查找顺序则变为: 本地仓库 --> 远程仓库--> 中央仓库

二、Maven的下载与安装

认识了Maven后,我们就要开始使用Maven了,那么首先我们要进行Maven的下载与安装

下载地址:Maven – Download Apache Maven

2.1 安装步骤

Maven安装配置步骤:

2.1.1 解压安装(建议解压到没有中文、特殊字符的路径下。)

解压缩后的目录结构如下

bin目录 : 存放的是可执行命令。(mvn 命令重点关注)

conf目录 :存放Maven的配置文件。(settings.xml配置文件后期需要修改)

lib目录 :存放Maven依赖的jar包。(Maven也是使用java开发的,所以它也依赖其他的jar 包)

2.1.2 配置本地仓库

1)在自己计算机上新一个目录(本地仓库,用来存储jar包)

2)进入到conf目录下修改settings.xml配置文件

2.1). 使用记事本软件,打开settings.xml文件,定位到53行

2.2). 复制标签,粘贴到注释的外面(55行)

2.3). 复制之前新建的用来存储jar包的仓库路径,替换掉标签体内容

2.1.3 配置阿里云私服

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

进入到conf目录下修改settings.xml配置文件:

1). 使用记事本软件,打开settings.xml文件,定位到160行左右

2). 在标签下为其添加子标签,内容如下:

阿里云私服地址

2.1.4 配置Maven环境变量

Maven环境变量的配置类似于JDK环境变量配置一样

1). 在系统变量处新建一个变量MAVEN_HOME

MAVEN_HOME环境变量的值,设置为maven的解压安装目录

2). 在Path中进行配置 PATH环境变量的值,设置为:%MAVEN_HOME%\bin

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

mvn -v

三、IDEA集成Maven

我们要想在IDEA中使用Maven进行项目构建,就需要在IDEA中集成Maven

3.1 配置Maven环境

3.1.1 当前工程设置

1、选择 IDEA中 File => Settings => Build,Execution,Deployment => Build Tools => Maven

2、设置IDEA使用本地安装的Maven,并修改配置文件及本地仓库路径

Maven home path :指定当前Maven的安装目录

User settings file :指定当前Maven的settings.xml配置文件的存放路径

Local repository :指定Maven的本地仓库的路径 (如果指定了settings.xml, 这个目 录会自动读取出来, 可以不用手动指定)

3、设置配置工程的编译版本为17 Maven默认使用的编译版本为5(版本过低)

上述配置的maven环境,只是针对于当前工程的,如果我们再创建一个project,又恢复成默认的配置 了。 要解决这个问题, 我们就需要配置全局的maven环境。

3.1.2 全局设置

1、进入到IDEA欢迎页面 选择 IDEA中 File => close project

点击所有设置 进行设置

这里所设置的maven的环境信息,并未指定任何一个project,此时设置的信息就属于全局配置信息。 以后,我们再创建project,默认就是使用我们全局配置的信息。

3.2 创建maven项目

3.3 依赖管理

依赖具有传递性

依赖传递可以分为:

1. 直接依赖:在当前项目中通过依赖配置建立的依赖关系

2. 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

比如以上图中: projectA依赖了projectB。对于projectA 来说,projectB 就是直接依赖。 而projectB依赖了projectC及其他jar包。 那么此时,在projectA中也会将projectC的依 赖传递下来。对于projectA 来说,projectC就是间接依赖。

1、排除依赖

问题:之前我们讲了依赖具有传递性。那么A依赖B,B依赖C,如果A不想将C依赖进来,是否可以做到?

答案:在maven项目中,我们可以通过排除依赖来实现。

排除依赖:指主动断开依赖的资源。(被排除的资源无需指定版本)

依赖排除示例

maven-projectA依赖了maven-projectB,maven-projectB依赖了Junit。基于依赖的传递性,所以maven-projectA也依赖了Junit

使用排除依赖后

2、依赖范围

在项目中导入依赖的jar包后,默认情况下,可以在任何地方使用。

如果希望限制依赖的使用范围,可以通过标签设置其作用范围。

四、 Maven生命周期

Maven对项目构建的生命周期划分为3套(相互独立):

clean:清理工作。

default:核心工作。如:编译、测试、打包、安装、部署等。

site:生成报告、发布站点等。

三套生命周期又包含哪些具体的阶段呢, 我们来看下面这幅图:

我们看到这三套生命周期,里面有很多很多的阶段,这么多生命周期阶段,其实我们常用的并不多,主要关注以下几个

• clean:清除上一次maven项目中生成target文件

• compile:编译项目源代码,生成target文件

• test:使用合适的单元测试框架运行测试(junit)

• package:将编译后的文件打包,如:jar、war等,打包后的文件存放在target目录下;

• install:安装项目到本地仓库

IDEA工具为了方便程序员使用maven生命周期,在右侧的maven工具栏中,已给出快速访问通道

生命周期的顺序是:clean --> validate --> compile --> test --> package --> verify --> install --> site --> deploy

我们需要关注的就是:clean --> compile --> test --> package --> install

说明:在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。

思考:当运行package生命周期时,clean、compile生命周期会不会运行?

clean不会运行,compile会运行。 因为compile与package属于同一套生命周期,而clean与package不属于同一套生命周期

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

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

相关文章

C语言-指针的基本知识(上)

一、关于内存 存储器&#xff1a;存储数据器件 外存 外存又叫外部存储器&#xff0c;长期存放数据&#xff0c;掉电不丢失数据 常见的外存设备&#xff1a;硬盘、flash、rom、u盘、光盘、磁带 内存 内存又叫内部存储器&#xff0c;暂时存放数据&#xff0c;掉电数据…

【MIdjourne基础】 |MIdjourney基础参数全解析,各类辅助知识

文章目录 1 参数列表1.1 基础参数列表 2 基础参数详解2.1 模型版本选择2.2 模型出图模式选择2.3 基础生图参数2.3.1 --ar2.3.2 --stylize2.3.3 --no2.3.4 --chaos2.3.5 --quality2.3.6 --stop2.3.7 --hd2.3.8 --repeat 1 参数列表 1.1 基础参数列表 模型版本选择 目标参数作…

Redis -- 前置知识

目录 简要 分布式系统 负载均衡 引入缓存 数据库分表 微服务 小结 简要 redis是存储数据在内存中, 定义变量就是在内存中, 但是redis是在分布式系统中, 才能真正发挥威力, 如果只是单机程序, 那么直接通过变量来存储数据的方式将是最优的选择. …

同为科技(TOWE)自动控制循环定时插座

随着科技的发展&#xff0c;智能化家居已成为我们生活的重要组成部分。作为国内领先的智能家居品牌&#xff0c;同为科技&#xff08;TOWE&#xff09;推出的自动控制循环定时插座&#xff0c;无疑将科技与生活完美地结合在一起。 1.外观设计 同为科技&#xff08;TOWE&#x…

全能相似度计算与语义匹配搜索工具包,多维度实现多种算法,涵盖文本、图像等领域。支持文图搜索,满足您在不同场景下的搜索需求

全能相似度计算与语义匹配搜索工具包,多维度实现多种算法,涵盖文本、图像等领域。支持文图搜索,满足您在不同场景下的搜索需求。 Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索 Similar…

Linux 驱动开发基础知识——总线设备驱动模型(七)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

一道CTF签到题

点击题目的签到&#xff0c;提示&#xff1a; 看来需要修改请求的源地址&#xff1a; 上来我先尝试了我最常用的xff&#xff0c;结果不行&#xff0c;于是尝试了其他的几个常用请求头&#xff1a; 1.host头 如果后端从host取值来判断是否是本地就可以通过此方法进行绕过&…

简洁思路推理 KMP 算法——子字符串匹配

例题 28. 找出字符串中第一个匹配项的下标 暴力遍历解法 枚举原串 ss 中的每个字符作为「发起点」&#xff0c;每次从原串的「发起点」和匹配串的「首位」开始尝试匹配&#xff1a; 匹配成功&#xff1a;返回本次匹配的原串「发起点」。 匹配失败&#xff1a;枚举原串的下一个…

Python实战:将爬虫获取到的数据存到数据库中

在前几篇 Python 实战中&#xff0c;我们直接把爬虫获取到的数据存储到 excel 文件或者 csv 文件中。今天&#xff0c;我们将爬虫获取到的数据存储到数据库中。 而存到数据库中&#xff0c;我们可以选择 MySQL、PostgreSQL、SqLite、Sql Server 等数据库。 在这些数据库中 Sq…

重装Windows系统出现Windows无法安装到这个磁盘,选中的磁盘采用GPT分区

文章目录 1.问题描述2.问题解决 1.问题描述 重装Windows系统时&#xff0c;出现Windows无法安装到这个磁盘&#xff0c;选中的磁盘采用GPT分区这个提示 2.问题解决 1.shiftF10&#xff0c;打开命令行 2.输入&#xff1a;diskpart (打开分区工具) 3.输入&#xff1a;list di…

C语言“%”运算符是否可以对小数进行运算?

一、问题 “&#xff05;”运算符是否可以对⼩数进⾏运算&#xff1f; 二、解答 “&#xff05;”运算符&#xff0c;称为求余运算符或者模运算符&#xff0c;要求“&#xff05;”两侧都为整型数据&#xff0c;否则将会产⽣错误 #include <stdio.h> int main() {floa…

电路笔记 :MOS场效应晶体管+红外遥控+AMS1117 电源模块

三极管&#xff08;BJT&#xff0c;Bipolar Junction Transistor&#xff09;和 MOSFET&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff09;是两种不同类型的晶体管&#xff0c;它们在工作原理、性能特性和应用方面有一些重要的区别。 结构和工作原理…

Qt项目文件以及对象树

"在哪里走散&#xff0c;你都会找到我~" 前篇&#xff0c;我们仅仅对Qt创建了第一个简单的项目。相比于使用其他IDE创建工程项目&#xff0c;Qt会为自动创建诸如&#xff1a;.pro、.h\.cpp、.iu等文件&#xff0c;这些文件到底是什么&#xff1f;我们在使用Qt时 应该…

欢迎来到 Greasy Fork,这里是一个提供用户脚本的网站。

官方地址&#xff1a; https://greasyfork.org/zh-CN 欢迎来到 Greasy Fork&#xff0c;这里是一个提供用户脚本的网站。 脚本适用于&#xff1a; baidu.com bilibili.com qq.com iqiyi.com sohu.com 更多… 用户脚本是什么&#xff1f; 用户脚本是一段代码&#xff0c;它们能…

前端——CSS

目录 文章目录 前言 一.CSS简介 1.CSS选择器 2.CSS选择器语法 3.CSS样式引入 4.CSS 高级选择器 二.CSS样式 1.字体 ​编辑 2.文本 3. 背景 4.边框 5.边距 6.浮动 7.清除浮动 8.定位 9. 列表样式 10.伪类样式 三.盒子模型 四.CSS3新特性 1.边框 2.盒子阴影 …

win11设置mysql开机自启

目录 命令式 1、打开命令提示符或 PowerShell&#xff1a; 2、使用管理员权限运行命令行工具&#xff1a; 3、设置 MySQL 服务为开机自启动&#xff1a; 4、启动 MySQL 服务&#xff1a; 5、 验证设置是否生效&#xff1a; 操作视图式 1、右击任务栏 ---> 选择任务管…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--强化学习、模仿学习、机器人、开放词汇

专属领域论文订阅 关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 分类: 大语言模型LLM视觉模型VLM扩散模型视觉…

经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程

经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程 和之前实现的YOLOv2一样&#xff0c;根据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;在不脱离YOLOv3的大部分核心理念的前提下&#xff0c;重构一款较新的YOLOv3检测器&#xff0c;来对YOLOv3有…

网络安全科普:SSL证书保护我们的网上冲浪安全

当我们在线上愉快冲浪时&#xff0c;各类网站数不胜数&#xff0c;但是如何判定该站点是安全还是有风险呢&#xff1f; 当当当&#xff0c;SSL数字证书登场&#xff01;&#xff01; SSL证书也称为数字证书&#xff0c;是一种用于保护网站和用户之间通信安全的加密协议。由权…

SERVLET生命周期API

SERVLET生命周期API 在servlet的生命周期中,将发生创建Servlet上下文、创建会话、向Servlet上下文添加属性等各种事件。在servlet的生命周期内发生事件时,Web容器将通知侦听器类。要接收事件的通知,侦听器类需要扩展Servlet API的侦听器接口。 1. 事件类型 servlet生命周期…