## **什么是Maven**
相信现在很多公司基本上还是用Maven,相比于基于Goovy的Gradle,Maven到现在还是很多人的选择,虽然Hibernate已经于2010年迁移到Gradle,但是并不妨碍Maven的优秀。
Maven并不是一个POM文件,而是一个可以通过POM文件里面的信息描述来管理整个项目的构建、报告及文档的项目管理软件。
## **Maven常用命令**
**1、mvn install**
这是最常用的命令,用于把项目安装到本地的仓库中,提供给别的项目做引用或作自有项目。
**2、mvn clean**
与上面的install起着反作用能力,当你发现项目install有问题的时候,可以先clean(清除),然后重新install。
**3、mvn archetype**
这个非常容易理解,我们一般都在eclipse或者idea创建maven项目的时候,可以用这个命令,就是创建一个maven项目。
**4、mvn deploy**
一般情况下,我们做maven项目,都会有私库的存在,就是自己在服务器上建自己的,存放jar包的仓库,这个命令就是用来把我们install好的包发布(其实就是网络传输)上去。
**5、mvn site 生成项目相关信息的网站**
我们一般在一个项目的时候,都是有一定信息的,这个命令可以帮我们生成html形式的项目信息,不过现在小编很少用。
**6、mvn compile**
compile编译的意思,其实就是编译maven项目的源代码
**7、mvn test-compile**
与上面的类似,不过这次编译的是测试测试包里面的源代码
**8、mvn test**
现在很多项目都要求做单元测试,这个命令可以帮助我们测试所有的单元测试。
**9、mvn package**
这是一个集成过程,它的执行顺序是先clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段,最后是成一个jar包
**10、mvn eclipse**
生成一个eclipse可直接导入的文件
**11、mvnjetty:run与mvntomcat:run**
启用jetty服务或者启动tomcat服务
**12、mvn clean package -Dmaven.test.skip=true**
这个是执行重新打包的命令,但是这个重新打包是不会执行测试类,因为有时候测试类并不能连接到一些环境。
## **Maven的POM文件解析**
##### 1、父项目parent解析
```
<parent>
groupId:父项目的组织ID,如果发布到公网,需要全球唯一-->
<artifactId />
<groupId />
<version />
<relativePath />
</parent>
#artifactId:父项目的项目id,在组织id下需要作为唯一
#version:父项目的版本号
#relativePath:父项目的系统位置,一般不设置
```
##### 2、当前项目基础属性解析
```
<!--模型的版本,很少改变,一般定义好之后不用变化-->
<modelVersion>3.0.0</modelVersion>
<!--项目组织名称,如果继承parent,其实可以不用写-->
<groupId>com.boots</groupId>
<!--项目名称,这个要求写,打包的时候需要用到-->
<artifactId>boots-maven</artifactId>
<!--项目打包后的类型,常见的有jar,pom,war等三种-->
<packaging>war</packaging>
<!--项目当前版本,常见有RELEASE,SNAPSHOT,按照约定,尽可能要大写-->
<version>2.0.0-RELEASE</version>
<!--项目的名称,一般跟artifactId一样即可 -->
<name>boots-maven</name>
<!