一、安装和配置
安装
- 准备JDK环境
- 下载Maven ,解压
- 配置环境变量
3.1 添加 M2_HOME 和 MAVEN_HOME 到环境变量,指向 Maven 文件夹
3.2 添加 Maven bin 文件夹到 PATH 变量
3.3 需要时设置MAVEN_OPTS环境变量,-Xms128m -Xmx512m,改内存 - 复制{M2_HOME}/conf/settings.xml到.m2目录
代理
如公司要求通过代理才能访问外网,则需在配置文件settings.xml中为maven设置代理服务器,以访问外部仓库。
取消“
- Eclipse:使用m2eclipse
- NetBeans:已集成
不要使用IDE内嵌的Maven
二、POM文件
POM(Project Object Model,项目对象模型)是Maven项目的核心,根元素是 project。
坐标
通过坐标在仓库中定位项目
- 基本坐标:项目组(groupId),模块名字(artifactId),版本(version);
- 项目符号:groupId:artifactId:version
- 还可使用packaging定义打包方式(默认jar)、name定义友好名字、description描述、url项目网址
依赖
根元素 project 下的
- groupId、artifactId、version:坐标
- type:依赖类型。对应packaging,默认jar
- scope:依赖范围。编译、测试、运行时的classPath
- compile:默认范围,都有效。
- test:测试时有效
- provided:编译和测试时有效
- runtime:测试和运行时有效
- system:编译和测试时有效,与本机系统关联,可移植性差
- import:导入的范围,只在使用dependencyManagement中,表示从其他pom中导入dependecy的配置。
依赖传递:二级依赖范围为compile时可传递一级依赖;runtime传递时一级依赖的compile变为runtime;provided只传递provided;其他不传递
依赖调解:路径最短者优先 、路径相同时先声明者优先
- optional:依赖是否可选。如是可选的,则不会传递依赖
- exclusions:依赖排除。exclusion子元素中只需要groupId、artifactId
- 归类依赖:在属性
中统一声明版本号,${}引用 - 归类管理:在父POM中使用
同一版本,子模块可以继承,如果子模块不声明,就不会起作用
仓库
先从本地仓库找,没有再尝试远程仓库
- 本地仓库:默认路径"~/.m2/repository",可在"~/.m2/settings.xml"通过"localRepository"配置
- 远程仓库 :可配置多个
- 中央仓库:Maven核心自带仓库
- 私服:局域网内部架设,代理远程仓库、部署内部项目
- 镜像:为中央仓库分流、加速
- 仓库配置
POM中
元素、 子元素配置仓库 - id(id唯一,相同会覆盖)、name(仓库名称)、url(仓库地址)
- releases:发布版本,enabled是否支持下载,updatePolicy更新频率,checksumPolicy检查校验策略
- snapshots:快照版本,enabled是否支持下载,checksumPolicy检查校验策略
- 仓库认证
仓库需要账号密码时,通过settings.xml中
、** **元素认证:id(仓库id)、username、password - 仓库部署
部署到仓库,需要配置POM中**
**元素,其包含 和 子元素,都有id(仓库唯一标识)、name(方便阅读)、url(仓库地址)配置项。一般部署都需要settings.xml中配置仓库认证,然后运行命令“mvn clean deploy”构建部署。 - 镜像配置
settings.xml中
、** **元素配置id、name、url、mirrorOf(填写镜像id,“*”匹配所有,“!”表示排除,多个用“,”分割,“external:”排除本机)
三、生命周期和插件
生命周期
Maven 有三套相互独立的生命周期,每套周期包含若干阶段。周期相互独立,阶段相互依赖。maven命令基于这些阶段,调用任一阶段,它前面的所有阶段都会顺序执行。
- Clean:清理项目 pre-clean、clean、post-clean
- Default:构建的核心部分,编译,测试,打包,安装,部署等
validate、initialize、generate-sources、process-sources、generate-resources、process-resources、compile、process-classes、generate-test-sources、process-test-sources、test-compile、process-test-classes、test、prepare-package、package、pre-integration-test、integration-test、pre-integration-test、verify、install、deploy - Site:生成项目报告,站点,发布站点
pre-site、site、post-site、site-deploy
插件
Maven抽象出构建过程的生命周期,具体由插件实现。
- 插件目标:一个插件能实现多个功能,每个功能就是一个插件目标 插件前缀:插件目标,如dependency:list
- 插件绑定:插件和生命周期互相绑定。
- 内置绑定:生命周期每阶段都有默认绑定插件
- 自定义绑定:在POM中
元素下的 声明使用插件, 是插件执行配置, 绑定生命周期阶段(如不指定则绑定到插件的默认阶段), 制定插件目标
- 插件配置:
命令行中:-D参数;
POM中:中 元素下, 元素全局配置, 元素下 特定任务配置 - 插件仓库:
和 配置插件仓库
四、聚合与继承
聚合
目的:一条命令一次性构建多个项目。
方法:增加一个聚合模块,pom.xml中的
继承
目的:解决多模块maven项目的配置重复问题。
方法:增加一个父模块,在父pom中声明一些配置供子pom继承。