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定义,来决定以下两件事情:
- 需要执行哪些Phase
- 每个Phase需要执行哪些Goal
- 这需要考虑Packaging的方式,即<package>元素的定义。可以参考 http://maven.apache.org/guides/introduction/introduction-to-the- lifecycle.html#Packaging。每种Packaing的方式都预定义了一组必须执行的Phase,以及这些Phase中含有的 Goal。
- 另外,还需要考虑引用的Plug-in,在<execution>中定义了Default LifeCycle中哪些Phase。这些被定义的Phase也会被执行。在<execution>中,每个Phase都会与至少一个Goal相关联。
配置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。
转载于:https://blog.51cto.com/daition/190219