帶你深度解析Maven
一、What`s Maven?
Maven是基於項目對象模型(POM project object model),可以通過一小段描述信息(配置)來管理項目的構建,報告和文檔的軟件項目管理工具,簡單的說就是用來管理項目所需要的依賴且管理項目構建的工具。
1. 約定優於配置
2. 簡單
3. 測試支持
4. 構建簡單
5. CI集成
6. 插件豐富
1. 在官網下載安裝包:http://maven.apache.org/download.cgi
2. 解壓縮壓縮包
3. 配置環境變量MAVEN_HOME=maven的解壓後的目錄
4. 在變量Path的開頭增加"%MAVEN_HOME%\bin;"
5. 在MAVEN_HOME/conf/setting.xml文件中通過<localRepository></localRepository>標簽配置本地倉庫的位置
註 :超級pom.xml的位置:MAVEN_HOME/lib/maven-model-build-3.3.9.jar/org/apache/maven/model/pom-4.0.0.xml
1. 輸出本地安裝的maven的相關信息
mvn -version
2. 在IDEA中配置使用本地安裝的maven
打開: File-->Settings, 然後按照下圖操作
3. 控制臺使用maven命令,配置文件加載順序
1) ~/.m2/setting.xml
2) MAVEN_HOME/conf/setting.xml
<mirrors> <mirror> <id>aliyun_cental</id> <name>aliyun_cental</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>uk</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://uk.maven.org/maven2</url> </mirror> <mirror> <id>osc</id> <name>Human Readable Name for this Mirror</name> <url>http://maven.oschina.net:/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>osc_thirdparty</id> <mirrorOf>thirdparty</mirrorOf> <url>http://maven.oschina.net/content/repositories/thirdparty/</url> </mirror> </mirrors>
具體請移步另一篇博客:只用一招,讓你Maven依賴下載速度快如閃電
1. maven項目結構
src/main/java : 項目java類文件位置
src/main/resources : 項目配置資源文件位置
src/test/java : 項目單元測試java類文件位置
src/test/resources : 項目單元測試配置資源文件位置
target : 項目打包後文件所在位置
2. setting.xml元素解讀: https://www.cnblogs.com/yangxia-test/p/4409736.html
3. pom.xml元素解讀:
1. 坐標:maven通過groupId、artifactId、version三個變量來唯一確定一個具體的依賴(俗稱GAV)
2. 依賴:在pom.xml中我們通過dependency來聲明坐標信息(GAV)如:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.6.RELEASE</version> </dependency>
這樣我們就在項目中依賴了4.2.6.RELEASE版本的spring-core jar包.
註 :pom.xml中packaging用來指定打包方式,默認為:jar
3. dependencyManagementy
1) 只能出現在父pom裏
2) 統一版本號
3) 只是依賴聲明,並不直接依賴,需要時在子項目中在聲明要使用依賴的GA信息,V信息可以省略.
4. 依賴scope
1) compile:編譯依賴範圍,在編譯,測試,運行時都需要,依賴範圍默認值
2) test:測試依賴範圍,測試時需要。編譯和運行不需要,如junit
3) provided:已提供依賴範圍,編譯和測試時需要。運行時不需要,如servlet-api
4) runtime:運行時依賴範圍,測試和運行時需要。編譯不需要,例如面向接口編程,JDBC驅動實現jar
5) system:系統依賴範圍。本地依賴,不在maven中央倉庫,結合systemPath標簽使用
5. 依賴傳遞時仲裁原則
1) 路徑最短原則
2) 路徑一樣長,加載先後原則
<dependency> <groupId>com.xxx</groupId> <artifactId>xxx</artifactId> <version>x.version</version> <exclusions> <exclusion> <groupId>com.xxx</groupId> <artifactId>yyy</artifactId> </exclusion> </exclusions> </dependency>
7. 依賴關系查看
進入工程根目錄,在cmd中運行
1)
2)
八、版本管理
盡量使用語義化版本,方便團隊協作,後面我們專門寫一篇文章來說語義化版本。
Maven中的版本號中帶SNAPSHOT和不帶的區別以及作用請移步:Maven版本號中隱藏的驚天大秘密
九、生命周期、插件
1. 生命周期
A build phases is made up of plugin goals.
default(compile、package、install、deploy ...)
3) site(又包括:pre-site、site、post-site、site-deploy)
2. 插件
請移步另一篇文章:
十、自定義手寫Maven的項目骨架
請移步另外一篇文章:手寫Maven的archetype項目腳手架
十一、總結
通過本文,我們就對maven有了一個直觀深入的了解和學習,通過maven我們可以進行自己的定制和開發。這是工程化的第一步,我們繼續加油,下一步解析Git和Jenkins.
帶你深度解析Maven