天天看點

Maven備忘錄

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。