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相關聯。
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。