一、Maven简介
1)Maven是什么
- Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。
- Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。
- POM (Project ObjectModel) :项目对象模型。
2)Maven的作用
- 项目构建:提供标准的、跨平台的自动化项目构建方式。
- 依赖管理:方便快捷的管理项目依赖的资源(jar包) , 避免资源间的版本冲突问题。不用自己手动去下载jar ,pom文件会自动管理下载好的jar包。
- 统一开发结构:提供标准的、统一的项目结构。
- 用来解决导入java类依赖的jar,编译java项目主要问题。
二、下载与安装
1)Maven下载
官网
Maven – Welcome to Apache Mavenhttps://maven.apache.org/
下载地址 Maven – Download Apache Mavenhttps://maven.apache.org/download.cgi
Binary(bin)是可执行版本,已经编译好可以直接使用。
Source (src)是源代码版本,需要自己编译成可执行软件才可使用。
tar.gz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是同样的,只是压缩格式不同。
tar.gz格式的文件比zip文件小很多,用于unix操作系统。
zip格式用于Windows操作系统,但在Windows系统使用WinRar工具一样能够解压缩tar.gz格式 。
2)安装与配置
-
下载完成后,选择一个路径进行解压,不建议放在c盘
-
去配置环境变量,如下图
此电脑→属性→高级系统设置→环境变量→系统变量→新建变量→填写好变量名和变量值→去path配置路径
- 系统变量:变量名:MAVEN_HOME ,变量值:你解压Maven文件所在的地址
- 系统变量:path :%MAVEN_HOME%\bin
3.然后win+R运行cmd,输入mvn -version,如图所示则配置成功
3)配置本地仓库
因为如果如果不手动配置一个手动仓库,Maven会自动给你添加到默认地址也就是c盘中的.m2的位置,随着导入的包越来越多,也会占用越来越多内存导致电脑运行速度慢。所以需要自己配置一个本地仓库并且设置以后从中央仓库下载到的包放在自己设置的仓库中。
1.在D盘中新创建一个Maven文件夹,在里面在创建一个repository文件夹,作为本地仓库。
2. 在你解压安装Maven文件的路径下\conf下找到settings.xml文件
3.找到节点localRepository,在注释外添加
<localRepository>你所新建的仓库地址</localRepository>
localRepository节点用于配置本地仓库,本地仓库其实起到了一个缓存的作用,它的默认地址是 C:\Users\用户名.m2。
当我们从maven中获取jar包的时候,maven首先会在本地仓库中查找,如果本地仓库有则返回;如果没有则从远程仓库中获取包,并在本地库中保存。全局setting与用户setting区别
●用户etting定义了当前用户的配置
●用户etting定义了当前用户的配置
4)配置阿里云的镜像仓库
因为如果都是从中央仓库中获取的话速度会很慢,因为中央仓库的地址在国外,所以我们需要用到阿里云创建的地址去访问中央仓库 ,这样下载jar包的速度比较快。
步骤如下:
- 在settings.xml配置文件中找到mirrors节点。
- 添加如下配置(注意要添加在<mirrors>和</mirrors>两个标签之间)。
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
5)配置完成后,预下载。
运行cmd,输入mvn help:system测试,Maven相关工具自动帮我们到Maven中央仓库下载缺省的或者Maven中央仓库更新的各种配置文件和类库(jar包)到Maven本地仓库中。
三、基础概念
- 仓库
- 坐标
1)仓库
●仓库:用于存储资源,包含各种jar包
●仓库分类:
◆本地仓库:自己电脑.上存储资源的仓库,连接远程仓库获取资源。
◆远程仓库:非本机电脑上的仓库,为本地仓库提供资源。
■中央仓库: Maven团队维护,存储所有资源的仓库。
■私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源。
●私服的作用:
◆保存具有版权的资源,包含购买或自主研发的jar包。
■中央仓库中的jar都是开源的,不能存储具有版权的资源。
◆一定范围内共享资源,仅对内部开放,不对外共享。
2)坐标
●什么是坐标?
Maven中的坐标用于描述仓库中资源的位置
Central Repository: (maven.org)https://repo1.maven.org/maven2/
●Maven坐标主要组成
groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如: org.mybatis)
artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
version:定义当前项目版本号
packaging:定义该项目的打包方式
●Maven坐标的作用
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
四、创建一个Maven项目(使用Idear202.2)
1)工程目录结构
2)Maven构建项目命令
Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔。
3)在IDEA中配置Maven
1.找到maven设置
2.设置相关
3.使用骨架创建Maven程序
4.安装Tmcat7运行插件
<!--构建-->
<build>
<!-- 设置插件-->
<plugins>
<!-- 具体插件配置-->
<plugin>
<!-- 组名-->
<groupId>org.apache.tomcat.maven</groupId>
<!-- 插件名-->
<artifactId>tomcat7-maven-plugin</artifactId>
<!-- 版本号-->
<version>2.1</version>
</plugin>
</plugins>
</build>
五、依赖管理
1)依赖配置
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖。
格式如下:
<dependencies>
<!-- 具体依赖-->
<dependency>
<!-- 依赖所属群组id-->
<groupId>log4j</groupId>
<!-- 依赖所属项目id-->
<artifactId>log4j</artifactId>
<!-- 依赖版本号-->
<version>1.2.12</version>
<!-- 可选依赖指对外隐藏当前所依赖的资源--不透明-->
<optional>true</optional>
</dependency>
</dependencies>
2)依赖传递
●依赖具有传递性
◆直接依赖:在当前项目中通过依赖配置建立的依赖关系
◆间接依赖: 被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
3)依赖传递冲突问题的优先顺序
●路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
●声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
●特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
4)可选依赖
可选依赖指对外隐藏当前所依赖的资源——不透明
<dependencies>
<!-- 具体依赖-->
<dependency>
<!-- 依赖所属群组id-->
<groupId>log4j</groupId>
<!-- 依赖所属项目id-->
<artifactId>log4j</artifactId>
<!-- 依赖版本号-->
<version>1.2.12</version>
<!-- 可选依赖指对外隐藏当前所依赖的资源--不透明-->
<optional>true</optional>
</dependency>
</dependencies>
5)排除依赖
·排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
6)依赖范围
●依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
●作用范围
◆主程序范围有效(main文件夹范围内)
◆测试程序范围有效(test文件夹范围内)
◆是否参与打包(package指令范围内)
7)依赖范围传递性
带有依赖范围的资源在进行传递时,作用范围将受到影响
六、生命周期
1)项目构建生命周期
●Maven构建生命周期描述的是一次构建过程经历经历了多少个事件
●Maven对项 目构建的生命周期划分为3套
◆clean: 清理工作
◆default:核心工作,例如编译,测试,打包,部署等
◆site: 产生报告,发布站点等
2) clean生命周期
●pre-clean 执行一-些需要在clean之前完成的工作
●clean 移除所有上一次构建生成的文件
●post-clean 执行一些需要在clean之 后立刻完成的工作
3)default构建生命周期
4)site构建生命周期
●pre-site 执行一些需要在生成站点文档之前完成的工作
●site 生成项目的站点文档
●post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
●site-deploy 将生成的站点文档部署到特定的服务器上
七、插件
●插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
●默认maven在各个生命周期上绑定有预设的功能
●通过插件可以自定义其他功能
<!--构建-->
<build>
<!-- 设置插件-->
<plugins>
<!-- 具体插件配置-->
<plugin>
<!-- 组名-->
<groupId>org.apache.maven.plugins</groupId>
<!-- 插件名-->
<artifactId>maven-source-plugin</artifactId>
<!-- 版本号-->
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
<goal>test-jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>