Maven备忘录
       看了很多次Maven的文档,感觉非常凌乱,不够连贯。每次看了都懂,可是事隔几日便忘记大半。索性在此做个笔记,算作备忘录。认识粗浅,如有不当之处,敬请指出。谢谢!为避免偏差,本文以Maven-2.0.9版本为说明对象。
 
1.   理解Maven
      可以这样理解,Maven根据Goal来做事。Goal可以近似理解为Ant的目标。但是,对于一个大型项目而言,一个build脚本可能需要定义太多的 Goal。所以,Maven还有一个Phase的概念。一个Phase可以认为包含了多个Goal。Maven每做一件事情,其实都是根据Goal定义的 动作去执行。

2.   Phase与Goal
       Maven有三种LifeCycle:default、clean和site。default用于处理项目的部署,clean用于清理项目,site用于 完成项目的站点文档。一套LifeCycle定义了有序的若干Phase。可以认为,Maven的每次执行,并不会执行所有的Phase和Goal。当 Maven开始执行时,会根据配置文件POM或者引用的Plug-in定义,来决定以下两件事情:
    1. 需要执行哪些Phase
    2. 每个Phase需要执行哪些Goal
        上述两点主要是基于以下两点考虑:
  1. 这需要考虑Packaging的方式,即<package>元素的定义。可以参考 http://maven.apache.org/guides/introduction/introduction-to-the- lifecycle.html#Packaging。每种Packaing的方式都预定义了一组必须执行的Phase,以及这些Phase中含有的 Goal。
  2. 另外,还需要考虑引用的Plug-in,在<execution>中定义了Default LifeCycle中哪些Phase。这些被定义的Phase也会被执行。在<execution>中,每个Phase都会与至少一个Goal相关联。
3.    配置Maven的Plug-in
       配置Maven的Plug-in无非就是制定其运行的Phase或者Goal。这两者可以通过两种方式定义:pom.xml及Plug-in程序内部。在 Pom.xml文件中,引用plug-in时,就可以通过<execution>制定其Phase及Goal;而在Plug-in程序内部, 可以通过@Goal及@Phase等Annotation进行定义。

4.   Maven命令举例说明
    1)  mvn install
 执行Install phase,此时install phase包含的goal,需要根据 上文所说的两个因素决定。
    2)  mvn archetype:generate
执行archetype这个Plug-in中,所定义的名为generate的Goal
    3) mvn clean a:b install
执行clean lifecycle的clean phase,再执行Plug-in a中的名为b的Goal,最后执行install phase,同1。