后端必备基础:Maven 从入门到实战超详细总结

张开发
2026/4/13 2:37:34 15 分钟阅读

分享文章

后端必备基础:Maven 从入门到实战超详细总结
后端web开发我们学的有技术描述Maven一款java中用于管理项目的软件Mysql最常用的一款数据库软件之一SpringBootspring家族的产品当前最为主流的项目开发技术。Mybatis用于操作数据库的框架一. Maven1.1 初始Maven1.1.1 什么是MavenMaven是Apache旗下的一个开源项目是一款用于管理和构建java项目的工具。官网https://maven.apache.org/Apache 软件基金会成立于1999年7月是目前世界上最大的最受欢迎的开源软件基金会也是一个专门为支持开源项目而生的非盈利性组织。开源项目https://www.apache.org/index.html#projects-list1.1.2 Maven的作用使用Maven能够做什么呢依赖管理统一项目结构项目构建依赖管理方便快捷的管理项目依赖的资源(jar包)避免版本冲突问题当使用maven进行项目依赖(jar包)管理则很方便的可以解决这个问题。 我们只需要在maven项目的pom.xml文件中添加一段如下图所示的配置即可实现。统一项目结构 :提供标准、统一的项目结构在项目开发中当你使用不同的开发工具 (如Eclipse、Idea)创建项目工程时若我们创建的是一个maven工程是可以帮我们自动生成统一、标准的项目目录结构项目构建 :maven提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式Maven是一款管理和构建java项目的工具二. Maven概述2.1 Maven介绍Apache Maven是一个项目管理和构建工具它基于项目对象模型(Project Object Model , 简称: POM)的概念通过一小段描述信息来管理项目的构建、报告和文档。官网https://maven.apache.org/Maven的作用方便的依赖管理统一的项目结构标准的项目构建流程2.2 Maven模型项目对象模型 (Project Object Model)依赖管理模型(Dependency)构建生命周期/阶段(Build lifecycle phases)1). 构建生命周期/阶段(Build lifecycle phases)2). 项目对象模型 (Project Object Model)坐标就是资源(jar包)的唯一标识通过坐标可以定位到所需资源(jar包)位置3). 依赖管理模型(Dependency)之前我们项目中需要jar包时直接就把jar包复制到项目下的lib目录而现在书写在pom.xml文件中的坐标又是怎么能找到所要的jar包文件的呢答案Maven仓库2.3 Maven仓库仓库用于存储资源管理各种jar包仓库的本质就是一个目录(文件夹)这个目录被用来存储开发中所有依赖(就是jar包)和插件Maven仓库分为本地仓库自己计算机上的一个目录(用来存储jar包)中央仓库由Maven团队维护的全球唯一的。仓库地址https://repo1.maven.org/maven2/远程仓库(私服)一般由公司团队搭建的私有仓库当项目中使用坐标引入对应依赖jar包后首先会查找本地仓库中是否有对应的jar包如果有则在项目直接引用如果没有则去中央仓库中下载对应的jar包到本地仓库如果还可以搭建远程仓库(私服)将来jar包的查找顺序则变为 本地仓库 -- 远程仓库-- 中央仓库2.4 Maven安装认识了Maven后我们就要开始使用Maven了那么首先我们要进行Maven的下载与安装。2.4.1 下载下载地址https://maven.apache.org/download.cgi2.4.2 安装步骤Maven安装配置步骤解压安装配置仓库配置Maven环境变量1、解压 apache-maven-3.6.1-bin.zip解压即安装建议解压到没有中文、特殊字符的路径下。假如解压到 D:\develop下。解压缩后的目录结构如下bin目录 存放的是可执行命令。mvn 命令重点关注conf目录 存放Maven的配置文件。settings.xml配置文件后期需要修改lib目录 存放Mav2、配置本地仓库2.1、在自己计算机上新一个目录本地仓库用来存储jar包en依赖的jar包。Maven也是使用java开发的所以它也依赖其2.2、进入到conf目录下修改settings.xml配置文件1). 使用超级记事本软件打开settings.xml文件定位到53行2). 复制localRepository标签粘贴到注释的外面55行3). 复制之前新建的用来存储jar包的路径替换掉localRepository标签体内容3、配置阿里云私服由于中央仓库在国外所以下载jar包速度可能比较慢而阿里公司提供了一个远程仓库里面基本也都有开源项目的jar包。进入到conf目录下修改settings.xml配置文件1). 使用超级记事本软件打开settings.xml文件定位到160行左右2). 在mirrors标签下为其添加子标签mirror内容如下mirror idalimaven/id namealiyun maven/name urlhttp://maven.aliyun.com/nexus/content/groups/public//url mirrorOfcentral/mirrorOf /mirror注意配置的位置在mirrors ... /mirrors 中间添加配置。如下图所示注: 只可配置一个mirror(另一个要注释!) 不然两个可能发生冲突导致jar包无法下载!!!!!!!4、配置环境变量Maven环境变量的配置类似于JDK环境变量配置一样1). 在系统变量处新建一个变量MAVEN_HOMEMAVEN_HOME环境变量的值设置为maven的解压安装目录2). 在Path中进行配置PATH环境变量的值设置为%MAVEN_HOME%\bin3). 打开DOS命令提示符进行验证出现如图所示表示安装成功mvn -v3. IDEA集成Maven我们要想在IDEA中使用Maven进行项目构建就需要在IDEA中集成Maven3.1 配置Maven环境3.1.1 当前工程设置1、选择 IDEA中 File Settings Build,Execution,Deployment Build Tools Maven2、设置IDEA使用本地安装的Maven并修改配置文件及本地仓库路径Maven home path 指定当前Maven的安装目录User settings file 指定当前Maven的settings.xml配置文件的存放路径Local repository 指定Maven的本地仓库的路径 (如果指定了settings.xml, 这个目录会自动读取出来, 可以不用手动指定)3、配置工程的编译版本为11Maven默认使用的编译版本为5版本过低上述配置的maven环境只是针对于当前工程的如果我们再创建一个project又恢复成默认的配置了。 要解决这个问题 我们就需要配置全局的maven环境。3.1.2 全局设置1、进入到IDEA欢迎页面选择 IDEA中 File close project2、打开 All settings , 选择 Build,Execution,Deployment Build Tools Maven3、配置工程的编译版本为11这里所设置的maven的环境信息并未指定任何一个project此时设置的信息就属于全局配置信息。 以后我们再创建project默认就是使用我们全局配置的信息。3.2 Maven项目3.2.1 创建Maven项目1、创建一个空项目2、创建模块选择Maven点击Next3、填写模块名称坐标信息点击finish创建完成4、在Maven工程下创建HelloWorld类Maven项目的目录结构:maven-project01 |--- src (源代码目录和测试代码目录) |--- main (源代码目录) |--- java (源代码java文件目录) |--- resources (源代码配置文件目录) |--- test (测试代码目录) |--- java (测试代码java目录) |--- resources (测试代码配置文件目录) |--- target (编译、打包生成文件存放目录)5、编写 HelloWorld并运行public class HelloWorld { public static void main(String[] args) { System.out.println(Hello Maven ...); } }3.2.2 POM配置详解POM (Project Object Model) 指的是项目对象模型用来描述当前的maven项目。使用pom.xml文件来实现pom.xml文件?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd !-- POM模型版本 -- modelVersion4.0.0/modelVersion !-- 当前项目坐标 -- groupIdcom.itheima/groupId artifactIdmaven_project1/artifactId version1.0-SNAPSHOT/version !-- 打包方式 -- packagingjar/packaging /projectpom文件详解project pom文件的根标签表示当前maven项目modelVersion 声明项目描述遵循哪一个POM模型版本虽然模型本身的版本很少改变但它仍然是必不可少的。目前POM模型版本是4.0.0坐标 groupId、artifactId、version定位项目在本地仓库中的位置由以上三个标签组成一个坐标packaging maven项目的打包方式通常设置为jar或war默认值jar3.2.3 Maven坐标详解什么是坐标Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置使用坐标来定义项目或引入项目中需要的依赖Maven坐标主要组成groupId定义当前Maven项目隶属组织名称通常是域名反写例如com.itheimaartifactId定义当前Maven项目名称通常是模块名称例如 order-service、goods-serviceversion定义当前项目版本号注意上面所说的资源可以是插件、依赖、当前项目。我们的项目如果被其他的项目依赖时也是需要坐标来引入的。3.3 导入Maven项目方式1使用Maven面板快速导入项目打开IDEA选择右侧Maven面板点击 号选中对应项目的pom.xml文件双击即可说明如果没有Maven面板选择 View Appearance Tool Window Bars方式2使用idea导入模块项目File Project Structure Modules Import Module找到要导入工程的pom.xml04. 依赖管理4.1 依赖配置依赖指当前项目运行所需要的jar包。一个项目中可以引入多个依赖例如在当前工程中我们需要用到logback来记录日志此时就可以在maven工程的pom.xml文件中引入logback的依赖。具体步骤如下在pom.xml中编写dependencies标签在dependencies标签中使用dependency引入坐标定义坐标的 groupId、artifactId、versiondependencies !-- 第1个依赖 : logback -- dependency groupIdch.qos.logback/groupId artifactIdlogback-classic/artifactId version1.2.11/version /dependency !-- 第2个依赖 : junit -- dependency groupIdjunit/groupId artifactIdjunit/artifactId version4.12/version /dependency /dependencies点击刷新按钮引入最新加入的坐标刷新依赖保证每一次引入新的依赖或者修改现有的依赖配置都可以加入最新的坐标注意事项如果引入的依赖在本地仓库中不存在将会连接远程仓库 / 中央仓库然后下载依赖这个过程会比较耗时耐心等待如果不知道依赖的坐标信息可以到mvn的中央仓库https://mvnrepository.com/中搜索添加依赖的几种方式利用中央仓库搜索的依赖坐标利用IDEA工具搜索依赖熟练上手maven后快速导入依赖4.2 依赖传递4.2.1 依赖具有传递性早期我们没有使用maven时向项目中添加依赖的jar包需要把所有的jar包都复制到项目工程下。如下图所示需要logback-classic时由于logback-classic又依赖了logback-core和slf4j所以必须把这3个jar包全部复制到项目工程下我们现在使用了maven当项目中需要使用logback-classic时只需要在pom.xml配置文件中添加logback-classic的依赖坐标即可。在pom.xml文件中只添加了logback-classic依赖但由于maven的依赖具有传递性所以会自动把所依赖的其他jar包也一起导入。依赖传递可以分为直接依赖在当前项目中通过依赖配置建立的依赖关系间接依赖被依赖的资源如果依赖其他资源当前项目间接依赖其他资源4.2.2 排除依赖问题之前我们讲了依赖具有传递性。那么A依赖BB依赖C如果A不想将C依赖进来是否可以做到答案在maven项目中我们可以通过排除依赖来实现。什么是排除依赖排除依赖指主动断开依赖的资源。被排除的资源无需指定版本dependency groupIdcom.itheima/groupId artifactIdmaven-projectB/artifactId version1.0-SNAPSHOT/version !--排除依赖, 主动断开依赖的资源-- exclusions exclusion groupIdjunit/groupId artifactIdjunit/artifactId /exclusion /exclusions /dependency依赖排除示例maven-projectA依赖了maven-projectBmaven-projectB依赖了Junit。基于依赖的传递性所以maven-projectA也依赖了Junit4.4 生命周期4.4.1 介绍Maven的生命周期就是为了对所有的构建过程进行抽象和统一。 描述了一次项目构建经历哪些阶段。在Maven出现之前项目构建的生命周期就已经存在软件开发人员每天都在对项目进行清理编译测试及部署。虽然大家都在不停地做构建工作但公司和公司间、项目和项目间往往使用不同的方式做类似的工作。Maven从大量项目和构建工具中学习和反思然后总结了一套高度完美的易扩展的项目构建生命周期。这个生命周期包含了项目的清理初始化编译测试打包集成测试验证部署和站点生成等几乎所有构建步骤。Maven对项目构建的生命周期划分为3套相互独立clean清理工作。default核心工作。如编译、测试、打包、安装、部署等。site生成报告、发布站点等。三套生命周期又包含哪些具体的阶段呢, 我们来看下面这幅图:我们看到这三套生命周期里面有很多很多的阶段这么多生命周期阶段其实我们常用的并不多主要关注以下几个• clean移除上一次构建生成的文件• compile编译项目源代码• test使用合适的单元测试框架运行测试(junit)• package将编译后的文件打包如jar、war等• install安装项目到本地仓库Maven的生命周期是抽象的这意味着生命周期本身不做任何实际工作。在Maven的设计中实际任务如源代码编译都交由插件来完成。DEA工具为了方便程序员使用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不属于同一套生命周期。4.4.2 执行在日常开发中当我们要执行指定的生命周期时有两种执行方式在idea工具右侧的maven工具栏中选择对应的生命周期双击执行在DOS命令行中通过maven命令执行方式一在idea中执行生命周期选择对应的生命周期双击执行05. 附录5.1 更新依赖索引有时候给idea配置完maven仓库信息后在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了具体做法如下打开设置----搜索maven----Repositories----选中本地仓库-----点击Update5.2 清理maven仓库初始情况下我们的本地仓库是没有任何jar包的此时会从私服去下载如果没有配置就直接从中央仓库去下载可能由于网络的原因jar包下载不完全这些不完整的jar包都是以lastUpdated结尾。此时maven不会再重新帮你下载需要你删除这些以lastUpdated结尾的文件然后maven才会再次自动下载这些jar包。如果本地仓库中有很多这样的以lastUpadted结尾的文件可以定义一个批处理文件在其中编写如下脚本来删除set REPOSITORY_PATHE:\develop\apache-maven-3.6.1\mvn_repo rem 正在搜索... del /s /q %REPOSITORY_PATH%\*.lastUpdated rem 搜索完毕 pause操作步骤如下1). 定义批处理文件del_lastUpdated.bat (直接创建一个文本文件命名为del_lastUpdated后缀名直接改为bat即可 )2). 在上面的bat文件上右键-编辑。修改文件修改完毕后双击运行即可删除maven仓库中的残留文件。

更多文章