Maven自身指定定义了一套对项目进行编译,测试,打包,运行,部署等工做的抽象。Maven本身是不实际负责这些工做的,而是把它们交给了插件。因此Maven命令的实际工做执行者是各类各样的插件。html
要了解Maven命令,还得知道Maven生命周期的概念。Maven有三套独立的生命周期:clean, default和site。每一个生命周期又有不一样的阶段。这三个生命周期之间是互相独立的,调用一个不会影响另外一个。可是生命周期内部各个阶段之间倒是有先后依赖关系:必须先执行前面的阶段,才能够执行下一阶段。java
clean生命周期的目的是清理项目,包含三个阶段:程序员
若是我如今要执行clean,那么必须先执行pre-clean。(只要告诉Maven你想要作的最后的目标就能够了,Maven会自动执行改目标以前的全部阶段)apache
default生命周期定义了真正构建时所须要执行的全部步骤,有以下阶段tomcat
好吧,default生命周期多了一点,仍是同样,若是想要执行deploy,那么Maven会自动把deploy前面全部的阶段都执行一遍,可是永远不会执行clean生命周期的任何东西。因此咱们能够理解如这样的命令:服务器
mvn clean compilemaven
意思是先执行到clean生命周期的clean阶段,再执行到default生命周期的compile阶段。post
site生命周期的目的是创建和发布项目站点,有以下阶段测试
执行maven命令的最主要的方式就是调用Maven的生命周期的阶段。再提一遍:Maven各个生命周期之间互相独立,而每一个生命周期内部是有先后依赖关系的。ui
插件及其目标
Maven的工做是插件完成的,插件本身也有本身的目的,而且还不是一个目的。以插件maven-dependency-plugin为例,它有十多个目标,如:dependency:list,dependency:analyze,dependency:tree等等。(这种写法是一种通用的写冒号前面是插件的前缀,后面是插件的目标)
Maven生命周期与插件目标互相绑定
例如项目编译这个任务,对应maven default生命周期的compile阶段。而maven-compiler-plugin有一个目标compile可以完成这个任务。那么只要将他们绑定,就可以完成任务了。
好了,那么咱们应该执行命令: mvn compiler:compile来进行编译了。但是那样子得写一段比较长的命令。还好maven有一些内置绑定,咱们直接写生命周期的某个阶段,maven本身知道要调用哪一个插件,执行到哪一个目标。以下的内置绑定:
clean生命周期内只有一个阶段有绑定: clean阶段绑定了 maven-clean-plugin:clean。 那么咱们写mvn clean时,maven才知道要调用maven-clean-plugin:clean
site生命周期有两个:site阶段绑定maven-site-plugin:site ;site-deploy阶段绑定maven-site-plugin:deploy
default生命周期比较复杂,还要根据打包类型来决定绑定那个插件的那个目标。
那么咱们如今在回过头来再看命令 mvn clean deploy ,就会后更深的解释了:首先仍是告诉maven,我要执行到clean阶段,那么maven会找内置绑定,发现clean是与 maven-clean-plugin:clean绑定的,那么maven就会调用maven-clean-plugin:clean;接下来告诉maven,我要执行到deploy阶段,仍是同样,maven发现该阶段与maven-deploy-plugin:deploy绑定了,那么maven就会调用该插件了。
若是maven找不到绑定,那就会什么都不干。
若是你是个牛逼的程序员,以为maven-clean-plugin这个插件写的太挫了,本身写了个插件,怎么使用呢?就是接下来的自定义绑定了。
自定义绑定
先写个插件,那是必须的了。接下来在pom.xml文件中,build的子元素plugins中配置插件以下:
1 <plugin> 2 <groupId>org.apache.maven.plugins</groupId> 3 <artifactId>maven-source-plugin</artifactId> 4 <version>2.1.1</version> 5 <executions> 6 <execution> 7 <phase>verify</phase> 8 <goals> 9 <goal>jar-no-fork</goal> 10 </goals> 11 </execution> 12 </executions> 13 </plugin>
意思是 verify阶段绑定到 maven-source-plugin:jar-no-fork目标。那么执行 mvn verify是就会执行 maven-source-plugin:jar-no-fork
命令行配置插件参数
mvn test -Dmaven.test.skip=true
记住 -Dxxx是java设置参数的方式。
到这里就该差不懂明白了,压根就不须要记住所谓的maven经常使用命令。 用mvn 阶段名 大致上可以知足编译,测试的要求。
可是为了简便,仍是写一下:
mvn clean compile 编译
mvn clean test 测试
mvn clean package 打包
mvn clean install 把生成的jar/war包复制到本地repository(就是~/.m2/repository下面)
mvn clean deploy 把生成的jar/war包发送到远程repository(建议配置了私服,那就是往私服发送了)
mvn cargo:run 经过cargo插件,把生成的war包部署到本地服务器,并启动。(注意要先运行 mvn clean package 打包)
mvn cargo:redeploy 经过cargo插件,把生成的war包部署到远程服务器:若是已经有了,就先undeploy再deploy,若是没有直接deploy(注意要先运行 mvn clean package 打包,而且远程服务器是启动的)(怎么配置看Maven Cargo 远程不是到tomcat7x)