Maven入门
介绍:
-
Apache Maven
是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建 -
作用:
- 方便的依赖管理:方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
- 统一的项目结构:提供标准、统一的项目结构
- 标准的项目构建流程:标准跨平台的自动化项目构建方式
一个Maven项目的结构:
一、Maven的模型
- Maven模型分为三个部分:
1、构建生命周期/阶段
- 通过Maven中提供的各种各样的插件,我们就可以完成对应的功能(比如:编译插件、测试插件、打包插件等等)通过这些插件就可以完成Maven项目的标准化构建,而在执行这些构建操作的时候,不同的阶段就会有不同的文件产生(比如:编译后产生的字节码文件、打包之后就会有打包之后的jar文件产生等等),这些文件都放在了
target
目录下。
2、项目对象模型阶段(POM
)
- 这是Maven中核心的一块功能
- 项目对象模型是指在Maven之后可以通过
pom.xml
当中配置的一小段信息,来描述这个Maven工程
这三项信息称为Maven的坐标,通过这个坐标就可以唯一的标识以及定位这个项目
- 如果当前这个Maven工程中还需要依赖一些其他的资源,我们就可以在
pom.xml
文件中添加依赖管理模型
3、依赖管理模型(Dependency
)
- 通过
dependency
这个标签,在指定这个依赖的坐标,当我们添加了这个依赖的坐标,Maven就会自动的从仓库(本地仓库)中查找这个依赖,若没有找到,如果配置了国内的私服(远程仓库)则会快速的从这个仓库中下载,如果这个私服中也没有,则私服会从国外的中央仓库中下载(因此私服可以越用越方便);如果没有配置 国内的私服,则会直接从国外的中央仓库中下载(跨国下载,比较慢,不方便)。
仓库:
用于存储资源,管理各种jar包。
- 本地仓库:自己计算机上的一个目录
- 中央仓库:由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven2/
- 远程仓库(私服):一般由公司团队搭建的私有仓库
可以试试把仓库文件夹的user访问权限的完全控制和修改都打勾,然后再maven哪里刷新一下,我这里是这样解决的
二、Maven坐标
- 什么是坐标?
- Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置
- 使用坐标来定义项目或引入项目中需要的依赖
- Maven坐标主要组成
- groupld:定义当前Maven项目隶属组织名称(通常是域名反写)
- artifactld:定义当前Maven项目名称(通常是模块名称)
- Version:定义当前项目版本号
三、依赖管理
1、依赖配置:
- 依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖
- 配置:
- 在
pom.xml
中编写<dependencies>
标签 - 在
<dependencies>
标签中使用<dependency>
引入坐标 - 定义坐标的
groupld, artifactld, version
- 点击刷新按钮,引入最新键入的坐标
- 在
注意事项:
- 如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖
- 如果不知道依赖的坐标信息,可以到https://mvnrepository.com/中搜索
2、依赖传递:
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
如果又不想依赖的间接依赖,可以使用排除依赖
排除依赖:
如果projectA
不想依赖projectB
中的junit
依赖,在依赖projectB
的代码中的最后写上排除依赖exclusions
<dependency>
<groupId>com.itheima</groupId>
<artifactId>maven-projectB</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依赖-->
<exclusions>
<exclusion>
<artifactId>junit</artifactId>
<groupId>junit</groupId>
</exclusion>
</exclusions>
</dependency>
刷新后可得:
已经去掉了junit
依赖
3、依赖范围:
依赖的jar包,默认情况下,可以在任何地方使用。可以通过<scope>……</scope>
设置其作用范围:
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包运行(package指令范围内)
示例:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
scope值 | 主程序 | 测试程序 | 打包(运行) | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j |
test | - | Y | - | junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
四、生命周期
- Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一
- Maven中有3套相互独立的生命周期:
clean
:清理工作default
:核心工作,如:编译、测试、打包、安装、部署等site
:生成报告、发布站点等
每套生命周期包含一些阶段,阶段是有顺序的,后面的阶段依赖于前面的阶段
- 也就是说每套生命周期都是从上往下执行的
- 在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行
主要的五个生命周期阶段:
clean
:移除上一次构建生成的文件compile
:编译项目源代码test
:使用适合的单元测试框架运行测试(junit
)package
:将编译后的文件打包,如:jar、war
等install
:安装项目到本地仓库
执行生命周期的两种方式:
- 在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行
- 在命令行中,通过命令执行
打开项目文件位置:
右键空白处,在终端中打开
输入mvn + 想要实现的阶段
即可执行,回到idea中刷新即可实现操作