一、Maven能做什么
1、假設我們有10個項目,都需要引入spring core模塊,那么需要十份重復的Spring Core.jar和commons-logging.jar
使用Maven:maven使用本地倉庫存儲的jar,所有項目都會公用倉庫中的同一分jar
2、Spring Core.jar必須同時引入版本兼容的commons-log.jar,否則會報錯
使用Maven:maven不需要關心這些問題,會自動引入Spring core.jar所需的兼容版本jar
3、如果一個項目里面有個100個jar,不知道那些jar是彼此關聯的,那些是互相排斥的,當需要升級版本時,增加或刪除一些jar,很容易出各種問題
使用Maven:maven升級jar,只需要把版本3.x改成4.x,他會自動解決那些問題
概括的說:Maven是一個項目管理和綜合工具。Maven簡化和標准化項目建設過程。處理編譯,分配,文檔,團隊協作和其他任務的無縫連接。Maven增加可重復性並負責建立相關的業務。
二、Maven的安裝和設置
1、安裝之前,首先確定你已經安裝了JDK
2、下載地址:http://maven.apache.org/download.cgi
3、將安裝文件解壓到你指定的目錄中
4、配置環境變量,變量名M2_HOME,變量值為Maven的安裝目錄,修改path值,在變量值后面加上bin,例如:%M2_HOME%/bin
5、測試maven環境,執行命令:mvn -v
三、從Maven模板創建一個項目
1、整個項目的項目目錄結構會自動創建
2、所有的源代碼放在文件夾/src/main/java/,所有的單元測試代碼放入:/src/test/java/
3、附加的一個標准的pom.xml被生成,這個Pom文件類似於Ant build.xml文件,它描述了整個項目的信息,一切“從目錄結構”,項目的插件,項目依賴,如何構建這個項目等。
4、Maven各個目錄的解釋說明
5、pom的基本信息
6、pom的依賴關系
7、pom詳解
a、添加插件
b、去除依賴
c、繼承
d、聚合(通過一個大的項目來整合各個小的模塊)
e、指定在Build時需要的資源文件(resource)
四、Maven的生命周期
1、clear:移除上一次構建生成的文件
2、compile:編輯項目的源代碼
3、test:使用單元測試框架進行測試,測試代碼不會被打包或者部署
4、package:接受編譯好的代碼,打包成可發布的格式
5、install:將包安裝到maven本地倉庫,供本地其他maven項目使用
6、deploy:將最終的包發布到遠程倉庫,供其他開發人員和maven項目使用。
7、site:生成項目的站點文檔
五、Maven倉庫
在Maven中,任何一個依賴、插件或者項目構建的輸出,都可以稱之為構建。
Maven在某個統一的位置存儲所有項目的共享的構件,這個統一的位置,我們就稱之為倉庫。
任何一個構件都有其唯一坐標,根據這個坐標可以定義其在倉庫中的唯一路徑,這就是Maven倉庫的布局方式。
如:groupId=org.testing
artfactId=testing
version=5.8
生成路徑:org/testing/testing/5.8/testing-5.8-jdk15.jar
六、Maven的依賴
1、依賴的傳遞性
一個復雜的項目會包含很多依賴,也有可能包含依賴其他構件的依賴。這個是Maven的強大特征之一,它支持了傳遞性依賴。
依賴原則:路徑優先原則,第一聲明原則。
解決依賴問題:
通過調整dependency的順序來解決:那個依賴的順訊在前面就依賴那個
自己添加一個denpendeny來解決:因為該路徑是最小的
通過exclusions元素排除不想要的傳遞性依賴。
2、Version解釋
snapshot版本表示不穩定,處於開發中的版本,即快照版本
release:表示趨於穩定,當前停止更新,可以用於發行的斑斑。
場景:協同開發時,如果A依賴B,由於B頻繁更新,B應該使用SNAPSHOT來標識自己。
3、依賴范圍Scope
compile(默認):編譯范圍的依賴,它在編譯和打包的時候都會把該依賴打包進去
test:測試依賴范圍,它在編譯和打包的時候不會把該依賴打包進去
provided:在編譯和測試范圍有效,最后生成war包時不會打包進去
rumtime:運行時依賴,編譯的時候不依賴
import:導入依賴范圍
system:系統依賴范圍