Maven自身指定定义了一套对项目进行编译,测试,打包,运行,部署等工作的抽象。Maven自己是不实际负责这些工作的,而是把它们交给了插件。所以Maven命令的实际工作执行者是各种各样的插件。

要了解Maven命令,还得知道Maven生命周期的概念。Maven有三套独立的生命周期:clean, default和site。每个生命周期又有不同的阶段。这三个生命周期之间是互相独立的,调用一个不会影响另一个。但是生命周期内部各个阶段之间却是有前后依赖关系:必须先执行前面的阶段,才可以执行下一阶段。

clean生命周期的目的是清理项目,包含三个阶段:

  • pre-clean:
  • clean:清理上一次构建生成的文件
  • post-clean:

  如果我现在要执行clean,那么必须先执行pre-clean。(只要告诉Maven你想要做的最后的目标就可以了,Maven会自动执行改目标之前的所有阶段)

default生命周期定义了真正构建时所需要执行的所有步骤,有如下阶段

  1. validate
  2. initialize
  3. generate-sources
  4. process-sources
  5. generate-resources
  6. process-resources
  7. compile
  8. process-classes
  9. generate-test-sources
  10. process-test-sources
  11. generate-test-resources
  12. process-test-resources
  13. test-compile
  14. process-test-classes
  15. test
  16. prepare-package
  17. package
  18. pre-integration-test
  19. integration-test
  20. post-integration-test
  21. verify
  22. install
  23. deploy

好吧,default生命周期多了一点,还是一样,如果想要执行deploy,那么Maven会自动把deploy前面所有的阶段都执行一遍,但是永远不会执行clean生命周期的任何东西。所以我们可以理解如这样的命令:

  mvn clean compile

意思是先执行到clean生命周期的clean阶段,再执行到default生命周期的compile阶段。

site生命周期的目的是建立和发布项目站点,有如下阶段

  1. pre-site
  2. site
  3. post-site
  4. site-deploy

执行maven命令的最主要的方式就是调用Maven的生命周期的阶段。再提一遍:Maven各个生命周期之间互相独立,而每个生命周期内部是有前后依赖关系的。

插件及其目标

  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中配置插件如下:

             <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</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

Maven 命令格式及一些常用命令的更多相关文章

  1. linux介绍、命令(基本命令、常用命令、使用方法、基本格式)

    操作系统(科普章节) 目标 了解操作系统及作用 1. 操作系统(Operation System,OS) 一个例子说明操作系统 操作系统作为接口的示意图 没有安装操作系统的计算机,通常被称为 裸机 如 ...

  2. linux命令行下svn常用命令

    linux命令行下svn常用命令 1. 将文件checkout到本地目录 1 #path是服务器上的目录 2 svn checkout path 3 4 #示例 5 svn checkout svn: ...

  3. Git 命令详解及常用命令

    Git 命令详解及常用命令 Git作为常用的版本控制工具,多了解一些命令,将能省去很多时间,下面这张图是比较好的一张,贴出了看一下: 关于git,首先需要了解几个名词,如下: 1 2 3 4 Work ...

  4. maven的配置及一些常用命令

    一般来说,github上大多的java项目都是使用maven,ant等进行构建的.由于之前没有使用过maven,因此这几天对maven进行了简单的学习.古话说:“温故而知新”,一些命令长时间不使用都会 ...

  5. Maven的目录结构和常用命令

    一.Maven项目的目录结构  1.顶级目录结构   src:该目录主要存放的是项目的源代码文件. target:该目录是项目编译后产生的一个目录,主要存放的是编译后的.class文件. pom.xm ...

  6. Maven详解()-- 常用命令

    Maven常用命令: Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ 一,Maven常用命令: ...

  7. Maven 仓库、坐标、常用命令

    maven中的仓库 需要jar包时,先到本地仓库中找,没有就从中央仓库去下载到本地仓库. 中央仓库很多都在国外,下载速度慢.国内的一些公司在自己的服务器上搭建了maven仓库(中央仓库的镜像),供内部 ...

  8. 【原创】Linux下获取命令的帮助与常用命令

    Linux中的shell命令一般是执行步骤:用户在终端输入命令回车,系统内核会在当前用户的环境变量PATH中去读取环境变量的值 变量的值就是命令的路径,命令路径不只一个,于是系统会从这些路径中从左至右 ...

  9. 『现学现忘』Docker常用命令 — 21、容器常用命令(三)

    目录 13.进入正在运行的容器并以命令行交互 (1)方式一 (2)方式二 (3)attach和exec的区别 14.从容器内拷贝文件到主机上 15.Docker常用命令小结 (1)容器生命周期管理 ( ...

随机推荐

  1. Data Structure Trie: suffix problem

    http://www.geeksforgeeks.org/suffix-array-set-1-introduction/ http://www.geeksforgeeks.org/pattern-s ...

  2. Java多线程系列 JUC线程池02 线程池原理解析(一)

    转载  http://www.cnblogs.com/skywang12345/p/3509960.html ; http://www.cnblogs.com/skywang12345/p/35099 ...

  3. Linux查看硬盘使用情况

    df df - report file system disk space usage df是查看文件系统磁盘使用情况的命令.如: # df -h Filesystem Size Used Avail ...

  4. SiteServer CMS 5.0 源码入门

    开发者中心 STL 语言 文 档 博 客 论 坛 Github 二次开发 提示:文档中心正在完善中,我们将不断发布新文档,敬请期待...   新手入门 SiteServer CMS 能做什么 Site ...

  5. 算法(Algorithms)第4版 练习 1.5.23

    package com.qiusongde; import edu.princeton.cs.algs4.StdOut; public class Exercise1523 { public stat ...

  6. Codeforces Round #377 (Div. 2) F - Tourist Reform

    前言:关于如何求双连通分量,我们可以在tarjan搜索时标记下所有桥的位置(双连通分量(可以认为是没有桥的无向图图)即可通过删去所有桥得到),那么怎么找桥呢,对于每一条搜索到的边u->x,如果l ...

  7. linux应用之make命令详解

    从源代码安装过软件的朋友一定对 ./configure && make && make install 安装三步曲非常熟悉了.然而究竟这个过程中的每一步幕后都发生了些什 ...

  8. ES field store yes no 区别——可以设置为false,如果_source有的话

    store By default, field values are indexed to make them searchable, but they are not stored. This me ...

  9. SPOJ8093Sevenk Love Oimaster(广义后缀自动机)

    Oimaster and sevenk love each other.     But recently,sevenk heard that a girl named ChuYuXun was da ...

  10. Undefined exploded archive location(在myeclipse中TOMCAT不能发布程序。)

    原因:          在工程转移过程中,导致工程的配置文件出错: 解决方法:          1.在工程目录下的.mymetadata文件中可能webrootdir被改无效了(把下面内容拷到你的 ...