為什么要使用Maven
- 添加第三方jar包,使用Maven后,jar包沒必要復制到lib文件下了,只需要給一個坐標就行
- 解決jar包之間的依賴關系,Maven會自動將當前jar包依賴的包引入
- 處理jar包的沖突,Maven中內(nèi)置了兩條依賴原則:最短路徑者優(yōu)先和先聲明者優(yōu)先,防止出現(xiàn)jar包沖突
- 獲取第三方jar包,建立父工程
- 實現(xiàn)項目的分布式部署,多個模塊之間的依賴關系,
Maven是什么
一個自動化構(gòu)建工具
Maven的核心概念
- POM:項目對象模型。將Java工程的相關信息封裝為對象作為便于操作和管理的模型。Maven工程的核心配置??梢哉f學習Maven就是學習pom.xml文件中的配置。
- 約定的目錄結(jié)構(gòu):現(xiàn)在JavaEE開發(fā)領域普遍認同一個觀點:約定>配置>編碼。意思就是能用配置解決的問題就不編碼,能基于約定的就不進行配置。在idea中自己生成了其實
- 坐標
使用如下三個向量在Maven的倉庫中唯一的確定一個Maven工程。
- [1]groupId:公司或組織的域名倒序+當前項目名稱
- [2]artifactId:當前項目的模塊名稱
- [3]version:當前模塊的版本
- 依賴,當A jar包需要用到B jar包中的類時,我們就說A對B有依賴。例如:commons-fileupload-1.3.jar依賴于commons-io-2.0.1.jar。python到處是依賴
- 依賴的范圍
-- 只有依賴范圍時可以訪問
-- 路徑最短者優(yōu)先,a-->b-->c ,b和c都依賴一個包的不同版本,此時最短路徑優(yōu)先
-- 這里“聲明”的先后順序指的是dependency標簽配置的先后順序。
- compile:主程序,測試程序都可以
- test:在主程序中不能用
- provided: 主程序和測試程序都可以用,但是在服務器上有可以不被使用
- 依賴的傳遞性
- 倉庫,本地倉庫和遠程倉庫
- 生命周期:
- 插件:具體任務由插件完成
繼承
解決非間接依賴的問題
創(chuàng)建父工程--》在子工程中引用父工程
// 父工程
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
//子項目
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
聚合
將多個工程拆分為模塊后,需要手動逐個安裝到倉庫后依賴才能夠生效。修改源碼后也需要逐個手動進行clean操作。而使用了聚合之后就可以批量進行Maven工程的安裝、清理工作。
<modules>
<module>../Hello</module>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>