Maven入门教程
前言
本文是作者通过学习过程中的学习笔记,希望帮助大家,同时大家可以搭配黑马程序员进行学习
Maven配置
Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具
- 作用:
- 方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题,需要下载的依赖在pom.xml中进行声明就好,便捷好用
- 统一的目录结构(将多个软件不能够互相打开的问题做出很好的解决方案)
- 标准跨平台(linux,Windows,MacOS)的自动化构建方式
提供统一的,标准的构建流程以及简约的开发命令
举例:
比如要将maven中的文件进行编译,在右侧的maven的编辑中点击compile进行编译,编译好的文件会自动创建并存储到target目录中,而打包直接点击package就行
-
maven整体结构
maven中生命周期中的各个操作,比如编译,打包等都是通过对应的插件来执行完成的,不同的操作会产生对应的文件。
pom.xml是maven的核心,对maven工程进行描述,在文件中进行依赖管理,项目资源存储在仓库当中,通过pom.xml文件进行资源的调用
-
仓库
本地仓库:本地计算机上的目录文件
中央仓库:由Maven团队维护的全球唯一的仓库
https://repol.maven.org/maven2/
远程仓库(私服):一般由公司搭建的私有仓库
仓库运转:
当本地仓库中没有对应文件,本地仓库就会在远程仓库中进行查找,如果远程仓库中也没有,就会在中央仓库中进行查找(外网速度慢),如果找到会返回到远程仓库中,远程仓库保存下来,通过也返回到本地仓库当中。
-
Maven安装
请参考Maven安装篇
-
idea中配置maven环境
在build中配置maven,maven的安装目录,以及maven settings配置文件的地址,以及maven的本地仓库
-
创建Maven
name:项目名称
Groupld:组织名称(确定java文件包下的目录结构)
artifactld:模块名(确定该Maven处在的目录文件)
组织名称以及模块名还有版本号称为该Maven的坐标
配置好之后:
在pom.xml中存放工程信息:
java
<groupId>org.example</groupId>
<artifactId>maven_heima</artifactId>
<version>1.0-SNAPSHOT</version>
这个就是pom.xml中表示该Maven工程的坐标
java
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
该标签下第一行表示项目源码使用的jdk版本,第二行表示该项目在打包的时候使用的jdk版本,第三行表示使用的字符
注意:在刚刚创建好的Maven工程的Test目录下没有配置文件目录,这是因为不常用就隐藏了,如果要调出,需要在Test下进行创建文件夹,这时会进行提示
这时候点击会出现resources文件
-
Maven坐标
Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置
使用坐标来定义项目或引入项目中需要的依赖
坐标组成:
groupld:通常是域名反写
artifactld:定义当前Maven项目名称(通常是模块名称)
version:定义当前的版本号
-
如何导入Maven工程
方式一:
打开idea,点击右侧的Maven项目工具栏,点击+号,选中对应的pom.xml文件
方式二:通过菜单中的模块进行添加
Maven依赖管理
- 依赖配置
依赖:指的是项目在运行时所需要的jar包,一个项目中可以引入多个依赖
如何配置:
- 在pom.xml中编写
<dependencies>
标签 - 在
<dependencies>
标签中使用<dependency>
中引入坐标 - 定义坐标的groupld,artifactld,version
- 点击刷新按钮,引入最新加入的坐标
如图所示就是创建依赖的过程,当输入完之后可以在右侧的Maven面板中查询项目的依赖是否成功添加,默认是没有添加的,因为需要进行重新加载
提供Maven仓库以供大家进行依赖查找:https://mvnrepository.com/
- Maven依赖传递
依赖具有传递性
项目A需要项目B,当项目B需要依赖,所以当A导入依赖B的时候会自动将B所依赖的文件自动添加,称为项目依赖的传递性
因为依赖的传递性所以依赖分为直接依赖和间接依赖
如果不想要一个依赖所附带的依赖可以使用排除依赖:
java
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
在<version>
后接着写入排除依赖标签,并重新加载
-
可视化查看项目的依赖关系
在pom.xml文件中点击右键选择diagrams,选择show Dependencies此时会以图表的形式显示依赖之间的关系
-
依赖范围
依赖的jar包,默认情况下可以在任何地方使用。可以通过
<scope>
标签设置作用范围作用范围:
主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件夹范围内)
是否参与打包运行(package指令范围内)
scope取值表:
Maven的生命周期
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一
Maven有三套独立的生命周期:
clean:清理工作(主要清理项目构建后的一些字节文件,打包文件等)
default:核心工作,如:编译,测试,打包,安装,部署等;
site:生成报告,发布站点等
每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段, 在同一套生命周期中,运行后面的阶段,前面的阶段也会运行
常见的生命周期阶段
在idea的Maven面板栏中也可以查看常见的生命周期阶段
- 执行生命周期阶段
方式一:通过Maven面板栏进行执行
方式二:通过命令执行,在命令行中进入到maven项目目录下执行
mvn clean
mvn complie
如何绕过某一测试阶段:
进行点击跳过测试阶段
maven工程本身就是一个插件项目,所有的操作都是由插件完成的,每一个阶段操作都对应一个插件