一、maven 3.5 下載地址:http://maven.apache.org/download.cgihtml
二、下載瞭解壓到java
三、配置環境變量web
四、測試看是否安裝成功apache
五、maven配置(全局配置,用戶配置)服務器
3.一、全局配置 oracle
在maven安裝目錄的conf裏面有一個settings.xml文件,這個文件就是maven的全局配置文件。eclipse
該文件中配置來maven本地倉庫的地址maven
默認在系統的用戶目錄下的m2/repository中,該目錄是本地倉庫的目錄。ide
5.二、用戶配置工具
用戶配置文件的地址:~/.m2/settings.xml,該文件默認是沒有,須要將全局配置文件拷貝一份到該目錄下。
從新指定本地倉庫地址,若是不指定,則默認是~/.m2/repository目錄,若是用戶配置文件不存在,則使用全局配置文件的配置。
-D 傳入屬性參數
-P 使用pom中指定的配置
-e 顯示maven運行出錯的信息
-o 離線執行命令,即不去遠程倉庫更新包
-X 顯示maven容許的debug信息
-U 強制去遠程參考更新snapshot包
例如 mvn install -Dmaven.test.skip=true -Poracle
其餘參數能夠經過mvn help 獲取
一、mvn clean
說明: 清理項目生產的臨時文件,通常是模塊下的target目錄
二、mvn package
說明: 項目打包工具,會在模塊下的target目錄生成jar或war等文件,以下運行結果。
生成的文件 以下:
三、mvn test
說明: 測試命令,或執行src/test/java/下junit的測試用例.
四、mvn install
說明: 模塊安裝命令 將打包的的jar/war文件複製到你的本地倉庫中,供其餘模塊使用 -Dmaven.test.skip=true 跳過測試(同時會跳過test compile)
五、mvn deploy
說明: 發佈命令 將打包的文件發佈到遠程參考,提供其餘人員進行下載依賴 ,通常是發佈到公司的私服,這裏我沒配置私服,因此就不演示了。
POM全稱是Project Object Model,即項目對象模型。pom.xml是maven的項目描述文件,它相似與antx的project.xml文件。pom.xml文件以xml的 形式描述項目的信息,包括項目名稱、版本、項目id、項目的依賴關係、編譯環境、持續集成、項目團隊、貢獻管理、生成報表等等。總之,它包含了全部的項目 信息。
3.2.1. pom.xml的基本配置
[java] view plaincopy
modelVersion 描述這個POM文件是聽從哪一個版本的項目描述符。
groupId 針對一個項目的廣泛惟一識別符。一般用一個徹底正確的包的名字來與其餘項目的相似名字來進行區分(好比:org.apache.maven)。
artifactId 在給定groupID 的group裏面爲artifact 指定的標識符是惟一的 , artifact 表明的是被製做或者被一個project應用的組件(產出物)。
version 當前項目產生的artifact的版本以上4個元素缺一不可,其中groupId, artifactId, version描述依賴的項目惟一標誌。
[html] view plaincopy
project是pom.xml的根節點,至於其它元素請參考POM Reference
POM有3個很重要的關係:依賴、繼承、合成。
2.1. 依賴關係
[html] view plaincopy
若是想依賴一個maven庫中沒有的一個jar包,方法很簡單,就是先將此jar包使用如下的命令安裝到本地maven庫中:
mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1
再把依賴關係加進去便可。
2.2. 繼承關係
另外一個強大的變化, maven帶來的是項目繼承。
2.2.1. 定義父項目
[html] view plaincopy
packaging 類型,定義值爲 pom用於定義爲parent和合成多個項目。 固然咱們建立的maven項目的pom都繼承maven的super pom, 若是想看項目(父或子)的徹底的pom結構,能夠運行:
mvn help:effective-pom
一、mvn eclipse:eclipse
說明: 生成eclipse配置文件,導入到eclipse開放,若是是使用m2eclipse插件,則能夠不用次命令.直接使用插件導入到eclipse進行開放
注:經過次命令生產的項目,須要在eclipse中配置M2_HOME的命令,指向你的本地倉庫文件夾.
來看看生成的結果:。classpath就是字節碼
二、mvn eclipse:m2eclipse
生成eclipse配置文件,該配置文件需依賴eclipse 中有m2eclipse
-DdownloadSources=true 下載依賴包的源碼文件
-Declipse.addVersionToProjectName=true 添加版本信息到項目名稱中
三、mvn eclipse:clean
清除eclipse的項目文件
看看文件內容,沒有project文件 了
一、mvn jetty:run
說明: 能夠直接用jetty的服務器運行 注:此命令只適用於war的模塊,即web模塊.
二、mvn archetype:generate
說明: 模塊建立命令, 執行命令後,會提示選擇建立項目的模版,這裏選18(maven-archetype-quickstart)
後面會提示你輸入groupId(包存放的路徑):
eg:com.lin
提示輸入artifactId(模塊名稱):
eg:test-core
提示輸入version(版本):
1.0.0-SNAPSHOT
提示輸入package(指項目中基本的包路徑):
eg:com.lin
提示確認,回車便可
說明: 發行版本,可與scm工具集成,來提供版本管理.不等同與版本控制.容許是必須有goal.兩個經常使用的goal以下:
一、mvn release:clean
清理release操做是遺留下來的文件
二、mvn release:branch
說明: 建立分支,會在分支下建立執行的分支路徑
-DbranchName=xxxx-100317 分支中的名稱
-DupdateBranchVersions=false 是否更新分支的版本信息,默認爲false
-DupdateWorkingCopyVersions=false 是否更新主幹的版本信息,默認爲true
三、mvn release:prepare
建立標記,會有交互過程,提示tag中pom的版本及trunk下的新版本號,每一個模塊都會詢問,默認是最小版本號+1
-Dtag = 4.4.0 將在tags建立該名稱文件夾
-DdryRun=true 檢查各項設置是否正確,可作測試用,會產生一些修改的配置文件信息.
命令:
mvn release:perform
次命令會自動幫咱們簽出剛纔打的tag,而後打包,分發到遠程Maven倉庫中
一、mvn project-info-reports:dependencies
生成項目依賴的報表
二、mvn dependency:resolve
查看依賴
查看項目依賴狀況
三、mvn dependency:tree
打印出項目的整個依賴樹
四、mvn dependency:analyze
幫助你分析依賴關係, 用來取出無用, 重複依賴的好幫手
五、mvn install -X
追蹤依賴的完整軌跡
六、生命週期
resource->compile->process-classes->process-test-resources->test-compile->test->prepare-package->package
resources:resources 綁定在resource處理階段, 用來將src/main/resources下或者任何指定其餘目錄下的文件copy到輸出目錄中
resources:testResources 將test下的resources目錄或者任何指定其餘目錄copy到test輸出目錄下
compiler:testCompile 將測試類編譯(包括copy資源文件)
surefire:test 運行測試用例
jar:jar 打jar包
compile(編譯範圍)
compile是默認的範圍;若是沒有提供一個範圍,那該依賴的範圍就是編譯範圍。編譯範圍依賴在全部的classpath中可用,同時它們也會被打包。
provided(已提供範圍)
provided依賴只有在當JDK或者一個容器已提供該依賴以後才使用。例如,若是你開發了一個web應用,你可能在編譯classpath中須要可用的Servlet API來編譯一個servlet,可是你不會想要在打包好的WAR中包含這個Servlet API;這個Servlet API JAR由你的應用服務器或者servlet容器提供。已提供範圍的依賴在編譯classpath(不是運行時)可用。它們不是傳遞性的,也不會被打包。
runtime(運行時範圍)
runtime依賴在運行和測試系統的時候須要,但在編譯的時候不須要。好比,你可能在編譯的時候只須要JDBC API JAR,而只有在運行的時候才須要JDBC驅動實現。 test(測試範圍) test範圍依賴 在通常的 編譯和運行時都不須要,它們只有在測試編譯和測試運行階段可用。 system(系統範圍) system範圍依賴與provided相似,可是你必須顯式的提供一個對於本地系統中JAR文件的路徑。這麼作是爲了容許基於本地對象編譯,而這些對象是系統類庫的一部分。這樣的構件應該是一直可用的,Maven也不會在倉庫中去尋找它。。若是你將一個依賴範圍設置成系統範圍,你必須同時提供一個systemPath元素。注意該範圍是不推薦使用的(你應該一直儘可能去從公共或定製的Maven倉庫中引用依賴)。