2_MAVEN常用腳本分析

1_創建項目腳本

【1】上文講到了創建項目的腳本(中間無空格)

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=edu.fudan.maven -DartifactId=HelloMaven -DpackageName=edu.fudan.maven -Dversion=1.0-SNAPSHOT -DinteractiveMode=false 

在講解之前必須先了解下MAVEN座標的概念。

(1)MAVEN座標:唯一標識一個構建(項目,插件),從而實現統一規範。

(2)座標主要由groupId,artifactId,version,packaging組成

groupId:定義當前Maven項目隸屬公司和組織,一般爲反轉域名
artifactId:定義一個構建,一般爲當前項目名
version:定義當前項目的當前版本(分release(發行版本)和snapshot(開發版本)2種)
packaging:定義該項目的打包方式(war,jar,ear等,jar爲默認打包方式)。
(3)插件在本地倉庫中存放的目錄爲groupId/artifactId/version/artifactId-version.packaging。這樣可以唯一標識一個插件。

【2】所以上面命令的意義:
mvn archetype:generate 
是創建命令,(其實archetype是一個插件,:是調用符號,generate是這個插件的方法,類似類調用方法)
-DarchetypeGroupId=org.apache.maven.archetypes
用於引入此項目在創建時所使用的項目模型組,它用於指定要生成的Java項目類型。實際上Maven可以生成各種各樣的Java項目,如Web應用或帶Hibernate的Web應用隨指定的項目類型不同,這些應用需要的函數庫各自不同,程序目錄架構也不盡相同。在這裏,我們使用-DarchetypeGroupId=org.apache.maven.archetypes生成默認的
普通Java工程。
-DgroupId=edu.fudan.maven 就是定義項目的groupId
-DartifactId=HelloMaven就是定義項目的artifactId
-DpackageName=edu.fudan.maven就是定義項目的包名
-Dversion=1.0-SNAPSHOT定義項目的版本爲開發版1.0
-DinteractiveMode=false是否與Maven交互, 如果不指定或者設成true在創建過程中要還要設定幾個值,比如打包類型、版本號的格式等等。

【3】其實創建可以創建各種類型的項目,以上只是創立一個普通的java項目。可以利用DarchetypeArtifactId這個屬性選擇創建項目的模板
比如創建web類型的項目
mvn archetype:generate -DgroupId=edu.fudan.web -DartifactId=HelloWeb -DpackageName=edu.fudan.maven -Dversion=1.0-SNAPSHOT-DarchetypeArtifactId=maven-archetype-webapp-DinteractiveMode=false
以上的區別就在於去掉了-DarchetypeGroupId=org.apache.maven.archetypes,添加了-DarchetypeArtifactId這個屬性。
當然還可建立其他的模板比如stucts2,spring ,jsf等,可以參照具體的框架文檔。比如stucts2: http://struts.apache.org/docs/struts-2-maven-archetypes.html

【4】當然創建也可以一步步來
mvn archetype:generate(此處有空格)
maven會爲你列出所有可用的模板,讓你選擇創建的模板,然後按照提示一步步設置以上的信息(groupID等)。

2_輸入腳本命令的一般用法。
腳本命令是如何定義的:mvn 插件名稱 :插件的功能,比如 mvn eclipse:eclispe 就是調用eclipse插件的eclipse命令將maven項目轉爲符合eclipse的項目工程
有的時候也可以省略插件名稱,比如 mvn compile :compile 可以寫爲mvn compile 就是對項目的構建。這就是爲什麼你初次編譯項目時,maven要聯網下載插件。
比如這些常見的插件:
關於maven上的插件可以參考:http://maven.apache.org/plugins/index.html

3_常見命令列舉
mvn clean :清空,明顯的變化是項目文件下target文件夾被刪除
mvn compile :編譯項目,不編譯測試代碼,可以看到target文件夾的變化
mvn test :測試項目,會編譯整個項目,並測試
mvn package :打包 將項目打成POM中指定格式的包
mvn install :安裝到本地倉庫
mvndeploy :部署到遠程倉庫
mvn site :生成站點目錄
講到這裏不得不提一下maven的生命週期;
Maven有三套相互獨立的生命週期
【1】Clean Lifecycle 在進行真正的構建之前進行一些清理工作。 
clean生命週期每套生命週期都由一組階段(Phase)組成,我們平時在命令行輸入的命令總會對應於一個特定的階段。比如,運行mvn clean ,這個的clean是Clean生命周 期的一個階段。有Clean生命週期,也有clean階段。Clean生命週期一共包含了三個階段: 
pre-clean 執行一些需要在clean之前完成的工作 
clean 移除所有上一次構建生成的文件 
post-clean 執行一些需要在clean之後立刻完成的工作
mvn clean 中的clean就是上面的clean,在一個生命週期中,運行某個階段的時候,它之前的所有階段都會被運行,也就是說,mvn clean 等同於 mvn pre-clean clean ,如果我們運行 mvn post-clean ,那麼 pre-clean,clean 都會被運行。這是Mav en很重要的一個規則,可以大大簡化命令行的輸入。
【2】Default Lifecycle 構建的核心部分,編譯,測試,打包,部署等等。 
Default生命週期Default生命週期是Maven生命週期中最重要的一個,絕大部分工作都發生在這個生命週期中。這裏,只解釋一些比較重要和常用的階段: 
validate 
generate-sources 
process-sources 
generate-resources 
process-resources 複製並處理資源文件,至目標目錄,準備打包。 
compile 編譯項目的源代碼。 
process-classes 
generate-test-sources 
process-test-sources 
generate-test-resources 
process-test-resources 複製並處理資源文件,至目標測試目錄。 
test-compile 編譯測試源代碼。 
process-test-classes 
test 使用合適的單元測試框架運行測試。這些測試代碼不會被打包或部署。 
prepare-package 
package 接受編譯好的代碼,打包成可發佈的格式,如 JAR 。 
pre-integration-test 
integration-test 
post-integration-test 
verify 
install 將包安裝至本地倉庫,以讓其它項目依賴。 
deploy 將最終的包複製到遠程的倉庫,以讓其它開發人員與項目共享。 
運行任何一個階段的時候,它前面的所有階段都會被運行,這也就是爲什麼我們運行mvn install 的時候,代碼會被編譯,測試,打包。此外,Maven的插件機制是完全依賴Maven的生命週期的,因此理解生命週期至關重要。 
【3】Site Lifecycle 生成項目報告,站點,發佈站點。 
pre-site 執行一些需要在生成站點文檔之前完成的工作 
site 生成項目的站點文檔 
post-site 執行一些需要在生成站點文檔之後完成的工作,並且爲部署做準備 
site-deploy 將生成的站點文檔部署到特定的服務器上 
這裏經常用到的是site階段和site-deploy階段,用以生成和發佈Maven站點,這可是Maven相當強大的功能,文檔及統計數據自動生成。 

4_小結
介紹了MAVEN幾個基本命令的寫法和解釋,介紹了MAVEN的生命週期







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章