Maven

来源:互联网 发布:冯大辉 离职 知乎 编辑:程序博客网 时间:2024/06/07 01:05

介绍

Maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。简单来说,Maven可以帮助我们更有效得管理项目。它提供了仓库的概念帮助管理第三方的jar包,最大可能的避免由于环境配置的不同所产生的问题。

下载以及配置环境变量

下载的地址是maven.apache.org,解压之后可以看到里边有四个文件夹:bin目录包含mvn运行脚本;boot目录包含类加载器的框架,maven使用其加载自己的类库;conf下面是配置文件;lib目录下包含了maven运行时所用到的类库。

然后是配置环境变量
新建M2_HOME,变量值为安装目录。然后在Path中新增内容%M2_HOME%\bin;
这里写图片描述
这里写图片描述

在dos窗口输入mvn -v出现以下内容则配置完成
这里写图片描述

Maven的目录结构

这里写图片描述

maven常用的构建命令

这里写图片描述

maven自动建立目录骨架

archetype插件用于创建符合maven规定的目录骨架

打开dos窗口,切换到要建立目录骨架的文件夹中,然后输入命令即可。
这里写图片描述

maven中的坐标和仓库

坐标:Maven中任何一个依赖,插件,项目构建的输出都可以被称为构件,构件通过坐标作为其唯一标识。其中groupId、artifaceId、version组成项目的基本坐标。在maven事件中,任何构建都是由这些坐标来具体唯一标识的。
仓库:管理项目依赖。分为本地仓库和远程仓库这两种,在本地仓库中未找到需要的构件就回去远程仓库中查找并下载到本地仓库。
镜像仓库:所谓镜像,就是A提供了和B一样的功能。Maven中央仓库服务器位于国外,访问国内的镜像仓库会更快更稳定。在conf下的settings中可以找到mirrors配置镜像仓库。
更改仓库位置:maven从远程仓库中下载构件默认是存放在当前用户目录中C:\Users\Administrator\.m2\repository,可以通过修改settings中的进行修改。
这里写图片描述
settings文件复制一份到repo文件夹中,这样以后在更新版本的时候就不用再次修改settings

maven的生命周期和插件

完整项目构建过程包括:清理、编译、测试、打包、集成测试、验证、部署

maven生命周期:
clean 清理项目
default 构建项目
site 生成项目站点
三套生命周期是相互独立的,每一个生命周期都有相应的阶段,各个周期中的阶段是有顺序的,并且后面的阶段依赖于前面的阶段。

clean清理项目
pre-clean 执行清理前的工作
clean 清理上一次 构建生成的所有文件
post-clean 执行清理后的文件
default构建项目(最核心)
compile test package install
site生成项目站点
pre-site 在生成项目站点前要完成的工作
site 生成项目的站点文档
post-site 在生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上

maven中pom.xml解析

pom.xml是maven项目的核心管理文件,用于项目描述、组织管理、依赖管理和构建信息的管理。里边包含有许多标签。

<project> //根元素,包含pom的约束信息    <modelVersion> //固定版本,也是必须的元素,指定了当前pom的版本    //坐标信息    <groupId>//主项目标识,定义maven属于哪个实际的项目(组织名+项目名)    <artifaceId>//实际项目中的一个模块(项目名+模块名)    <version>//版本号一般由三个数字组成,snapshot快照,alpha内测,beta公测,release稳定,GA正式发布    <packaging>//打包类型,默认是jar,也可以是var zip pom    <name>//项目描述名    <url>//项目地址    <description>//项目描述    <developers>//开发人员    <licenses>//许可证    <organization>//组织信息    //依赖列表    <dependencies>        <dependency>            <groupId>            <artifactId>            <version>            <type>            <scope>//依赖范围            <optional>//设置依赖是否可选,默认false            <exclusions>//排除依赖传递列表    //依赖管理    <dependencyManagement>        <dependencies>//并不会引入到实际依赖,主要用在父模块中    //为构建行为提供相应支持    <build>        <plugins>//插件列表            <plugin>                <groupId>                <artifactId>                <version>    <parent>//在子模块中对父模块pom的继承    <modules>//聚合运行多个的maven项

依赖

maven依赖范围
控制依赖和classpath的关系
三种classpath:编译、测试、运行

compile:默认的范围,编译测试运行都有效
provided:编译和测试时有效
runtime:测试和运行时有效
test:测试时有效
system:同provided相同,但与本地系统相关联,可移植性差
import:导入的范围,只使用在dependencyManagement中,表示从其他pom导入dependency配置

maven依赖传递
依赖具有传递性,A依赖B,B依赖C,并没有让A依赖C,但是C会传入到A的依赖目录中。可以在<dependency>添加子元素<exclusions>除去传递依赖

maven依赖冲突
A和B依赖了不同版本的相同构建,那么依赖于A、B的C来说究竟依赖哪个版本的构建?
有两个原则:短路优先,先声明优先(路径长度相同)

maven聚合和继承

多个项目install安装到本地仓库中,必须依次执行installing,而Maven提供了聚合的方式将其放在一起运行,称之为聚合。

新建一个Maven项,修改其packaging为pom,使用<modules>引入多个Maven项再install。

可以将多个项的共同特性抽象成一个父项,将<dependencies>中的东西放入<dependencyManagement>中,再在子类中添加<parent>