目錄
1.Maven 概述
maven是一個項目管理工具
(1)依賴管理
傳統工程 | maven工程 |
---|---|
直接把jar包放在在項目中 | 真正的jar包放置在倉庫中,項目中只用放置jar包的座標 |
(2) 依賴範圍
Compile Test Runtime Provided
(3)倉庫的種類
種類 | 作用 |
---|---|
本地倉庫 | – |
遠程倉庫(私服) | 放置公司內部開發所需要的jar包 |
中央倉庫 | 安裝完maven之後,本地maven自動連接中央倉庫。 |
(4)倉庫之間的關係
類別 | 關係 |
---|---|
本地倉庫與pom文件 | 當我們啓動一個maven工程的時候,maven工程會通過pom文件中的jar包的座標去本地倉庫找對應的jar包(如果是編譯階段,可以直接找本地項目的源碼) |
本地倉庫和中央倉庫倉庫 | 默認情況下(或公司斷網時候),如果本地倉庫沒有jar包,maven工程會自動(斷網時通過局域網連接遠程倉庫)去中央倉庫下載jar包到本地。 |
本地倉庫和遠程倉庫 | 在公司中,如果本地沒有對應的jar包,會先從私服下載jar包,如果私服沒有jar包,可以從中央倉庫下載,也可以從本地上傳。 |
2.Maven 的好處
節省磁盤空間,可以一鍵構建,可以跨平臺,應用在大型項目時可以提高開發效率
一鍵構建:maven自身集成了tomcat插件,可以對項目進行編譯、測試、打包、安裝、發佈等操作。
maven三套生命週期:清理生命週期、默認生命週期、站點生命週期。
3. Maven生命週期
命令 | 含義 |
---|---|
clean | 構建項目的時候,清理之前構建項目的信息 |
validate | 驗證項目是否正確,所有必要的信息可用 |
compile | 對src/main下的目錄進行編譯 |
test | 使用合適的單元測試框架測試編譯的源代碼。這些測試不應該要求代碼被打包或部署 |
package | 本地項目直接打包,打包在本地編譯目錄—target目錄下 |
verify | 對集成測試的結果執行任何檢查,以確保滿足質量標準 |
install | 把包安裝到本地倉庫 |
deploy | 本地做好的項目直接打包上傳到私服,與其他開發人員和項目共享 |
4. 座標的書寫規範
groupId 公司或組織域名的倒序
artifactId 項目名或模塊名
version 版本號
示例:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--座標作用域,非必填-->
<scope>test</scope>
</dependency>
5. 解決衝突
maven工程要導入jar包的座標,就必須要考慮解決jar包衝突。
maven導入jar包中的一些概念
直接依賴:項目中直接導入的jar包,就是在該項目中的直接依賴包。
傳遞依賴:項目中沒有直接導入的jar包,可以通過項目直接依賴jar包傳遞到項目中去。
解決衝突方式一:第一聲明優先原則
概念:哪個jar包的座標在靠上的位置,這個jar包就是先聲明的。
先聲明的jar包座標下的依賴包,可以優先進入項目中。
解決衝突方式二:路徑近者優先原則。
直接依賴路徑比傳遞依賴路徑近,那麼最終項目進入的jar包會是路徑近的直接依賴包。
解決衝突方式三:直接排除法(推薦使用)
當我們要排除某個jar包下依賴包,在配置exclusions標籤的時候,內部可以不寫版本號。
因爲此時依賴包使用的版本會默認和本jar包一樣。
6.maven工程父子依賴
maven工程是可以分父子依賴關係:一個項目依賴另一個項目。
凡是依賴別的項目或拿到別的項目的依賴包,都屬於傳遞依賴。
比如:當前A項目,被B項目依賴,那麼我們A項目中所有jar包都會傳遞到B項目中,B項目開發者,如果在B項目中導入一套ssm框架的jar包,對於B項目是直接依賴,那麼直接依賴的jar包就會把我們A項目傳遞過去的jar包覆蓋掉。
爲了防止以上情況出現。我們可以把A項目中主要jar包的座標鎖住,那麼其他依賴該項目的項目中,及時有同名jar包直接依賴,也無法覆蓋。
<!-- 統一管理jar包版本 -->
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<!-- 鎖定jar包版本:子項目不可更改 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependencies>
</dependencyManagement>