Maven的主要目标是希望开发人员能在最短的时间内理解开发的完整状态。
为了达到这个目标,Maven在下面几个方面做出了努力:
简化构建过程
统一构建体系
提供高质量的项目信息
提供开发的最佳实践指南
实现透明的向新特性的迁移
使用Maven不须要知道一些潜在的或底层的机制,Maven屏蔽了非常多细节
Maven通过使用project对象模型(project object model POM)以及一系列可共享的插件来构建project。仅仅要你熟悉了怎么构建一个Mavenproject。你就自然知道了怎么构建全部的Mavenproject。
这样的统一的构建体系能够节省大量的了解project结构的时间。
Maven提供了非常多实用的project信息,这些信息一部分来自于project的POM文件,一部分来自原project源代码。
Maven能够提供下面信息:
从源代码控制处生成的改动日志文档
交叉引用源代码
开发人员邮件列表
项目依赖列表
包括覆盖率的单元測试报告
Maven改进了project信息的提供。全部这些信息对Maven用户来说都是透明的。
Maven还同意其它人提供Maven插件来获取project信息,与Maven获取的标准信息相同处理。这些都须要基于POM来完毕。
Maven致力于收集现有的开发的最佳实践原则,并以此来简化project的开发。 比如:规范。运行,和单元測试报告是正常使用Maven构建周期的一部分。
眼下Maven中的单元測试最佳实践例如以下: 将測试源代码放在一个单独的,但与主代码同级的位置 使用測试用例命名规范来定位和运行測试 让測试用例本身去设置測试环境,不要为了測试而专门构建环境 Maven 在project的文件夹结构上也给出了很多最佳实践指南。遵守了这些project文件夹结构指南后。假设你了解了这样的文件夹结构,你也就会easy的了解其它全部遵循了这样的文件夹结构的Mavenproject。
1、确定电脑上已经成功安装jdk7.0以上版本
2、maven安装包 下载地址:http://maven.apache.org/download.cgi
在上述地址中下载最新的Maven版本,解压到指定目录(此处根据自己的需要),本人解压到了D:\install\maven\apache-maven-3.5.0目录下,里面有bin、lib,conf等文件夹。
在我的电脑-------属性-------高级系统设置---------环境变量---------系统变量--------新建
变量名:M2_HOME
变量值:D:\install\maven\apache-maven-3.5.0
找到Path在环境变量值尾部加入:;%M2_HOME%\bin; //前面注意分号
打开dos窗口运行命令mvn -v,出现如下图所示的信息说明安装成功;
Maven会将下载的类库(jar包)放置到本地的一个目录下(一般默认情况下maven在本机的仓库位于C:\我的文档中\.m2.\repository),如果想重新定义这个目录的位置就需要修改Maven本地仓库的配置:
1、在自己喜欢的位置创建文件夹,此处本人创建的位置是(F:\Maven\repo)
2、在安装Maven的目录下找到conf文件夹,在文件夹中找到settings.xml文件,复制settings.xml文件放于F:\Maven
3、修改settings.xml文件,如下图所示:
4、在安装Maven的目录下找到conf文件夹,在文件夹中找到settings.xml文件,更改默认的仓库位置如下图所示:(注意两个地方的settings.xml都要修改)
5、实验一下我们刚才做的事情产生作用没有,控制台输入:mvn help:system
执行完该命令之后,在F:/Maven/repo下面会出现很多文件,这些文件就maven从中央仓库下载到本地仓库的文件。
mvn –version mvn -v 显示maven安装版本信息
mvn clean 清理项目打包文件,即项目下的target目录
mvn compile 编译项目下的src/main/Java目录源代码
mvn package 项目打包,在项目target目录下生成编译后的jar或war等文件
mvn install 项目打包并发布到本地仓库
mvn test 单元测试命令,执行src/test/java/下的junit的单元测试用例
-U 强制远程更新,否则默认每天只更新一次
比如-D的使用:mvn package -Dmaven.test.skip=true,即打包的时候跳过单元测试,install、deplay命令都可以使用。
可以输入mvn -h获取更多命令的帮助。
mvn site 生成项目相关信息的网站
mvn eclipse:eclipse 将项目转化eclipse项目
mvn dependency:tree 打印出项目的整个依赖关系树(排除jar包冲突时 了解整个项目依赖jar依赖树时最有用)
mvn deploy 项目打包并发布到远程仓库
命令参数
-D 传入属性参数
-P 使用指定的profile配置
-e 显示maven运行时的报错信息
-o 离线本地式执行命令,不去远程仓库更新包 -X 显示maven允许的debug信息
Maven仓库用来存放Maven管理的所有Jar包。
分为:本地仓库 和 中央仓库。
本地仓库 Maven本地的Jar包仓库。
中央仓库 Maven官方提供的远程仓库。
当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。
在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。
如下代码中,groupId和artifactId构成了一个Jar包的坐标。
groupId:所需Jar包的项目名 artifactId:所需Jar包的模块名 version:所需Jar包的版本号
传递依赖:
如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。
排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标写在中)
依赖冲突
若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略 短路优先 声明优先
短路优先
本项目——>A.jar——>B.jar——>X.jar 本项目——>C.jar——>X.jar 若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar。 在此时,Maven只会引用引用路径最短的Jar。
声明优先 若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。