寫在前面
今天我們來學習一下 Maven。簡單來說,Maven 是一種專案管理和構建工具,它的核心原理是透過使用外掛(這些外掛是由 Java 編寫的 JAR 包)來實現的。
Maven 的作用
假設一個公司要開發一個專案,而這個專案又分成多個模組,每個模組又有許多業務需求,需要不同的小組進行開發和整合。這樣的問題是,在快速發展的技術時代裡,每個人可能使用不同版本的 JAR 包和軟體版本。這種版本不一致的問題可能會導致在專案整合時出現各種問題。
Maven 如何解決這些問題
Maven 能夠有效地解決這些問題,其關鍵在於以下幾點:
-
中央倉庫
Maven 提供了一箇中央倉庫,開發者可以從這個中央倉庫中獲取所需的 JAR 包。此外,開發者完成的專案也可以打包成 JAR 包併發布到這個中央倉庫中,供其他模組的開發人員使用。 -
統一版本管理
專案經理或管理員可以使用 Maven 來統一管理所有開發所需的版本,從而最大程度上減少因版本不一致而產生的問題。Maven 的pom.xml
檔案中定義了專案所需的所有依賴及其版本,這樣可以確保每個開發者都使用相同版本的庫和工具。
Maven
下載
可以去國內映象站中下載 Maven。
安裝
-
解壓縮包
解壓 Maven 壓縮包到指定目錄。 -
環境變數配置
- 新建一個
MAVEN_HOME
環境變數,指向 Maven 解壓目錄。 - 將
MAVEN_HOME/bin
目錄新增到PATH
環境變數中。
- 新建一個
-
驗證安裝
在命令列中使用mvn -v
來查詢 Maven 的版本,驗證是否安裝成功。參考網站:Maven Repository
基本使用
專案構建
-
目錄結構
src # 書寫 Java 原始碼 ├── main # 書寫 Java 主程式程式碼 │ ├── java # 書寫 Java 程式碼 │ └── resources # 書寫配置檔案程式碼 └── test # 書寫測試程式碼 ├── java # 書寫測試 Java 程式碼 └── resources # 書寫測試配置檔案程式碼 pom.xml # 配置檔案 target # 編譯後目錄結構
-
相關操作
專案構建是一個過程,由以下步驟組成。專案建立是瞬間完成的。
- 清理:
mvn clean
- 編譯:
mvn compile
- 測試:
mvn test
- 報告:
mvn site
- 打包:
mvn package
- 安裝:
mvn install
- 部署:
mvn deploy
- 清理:
-
生命週期
Maven 的生命週期按照順序執行各個命令,包含以下三個部分:
- Clean LifeCycle:在進行真正的構建之前進行一些清理工作。
- Default LifeCycle:構建的核心部分,包括編譯、測試、打包、安裝、部署等。
- Site LifeCycle:生成專案報告、站點及釋出站點。
基本設定
pom.xml
配置
-
座標
Maven 使用座標來唯一標識一個專案的模組:
groupId
:公司或組織的域名倒序 + 當前專案名稱artifactId
:當前專案的模組名稱version
:當前模組的版本
<groupId>com.shujia</groupId> <artifactId>maven-demo</artifactId> <version>1.0</version>
-
設定父工程座標
<parent> <artifactId>maven-demo</artifactId> <groupId>com.shujia</groupId> <version>1.0</version> </parent>
-
設定依賴
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
-
依賴的範圍
依賴的語法:
compile
(預設值):在main
、test
、Tomcat 伺服器下均有效。test
:僅在test
目錄下有效。provided
:在main
、test
下有效,Tomcat 伺服器無效。
注意事項
-
在一個大型 Maven 專案中,多個子模組會繼承父模組的依賴。如果父模組中有多個不同版本的同一依賴,則使用最後宣告的版本。如果子模組中宣告瞭不同版本的依賴,則以子模組的版本為準。
-
如果子模組需要引入其他子模組的依賴,可以直接在
dependency
中新增相關座標。如果引入其他子模組的依賴,匯入的依賴會遵循宣告順序,即前面的模組優先。 -
如果想要控制父模組的所有依賴不直接傳遞給子模組,可以使用
dependencyManagement
來管理,子模組需要明確宣告父模組的依賴才能使用。 -
對於版本號相同的依賴,可以在
properties
中定義引數,例如<hadoop.version>3.1</hadoop.version>
,使用${hadoop.version}
替代版本號,以便統一管理版本號。
Maven 示意圖
在 IDEA 中配置 Maven
-
建立 Maven 專案
在 IntelliJ IDEA 中建立一個 Maven 專案。在設定中配置 Maven 的安裝目錄、依賴包存放位置和conf
中的settings.xml
檔案。IDEA 會自動建立並下載必要的依賴包。 -
配置完成
配置完成後,IDEA 會出現pom.xml
檔案和 Maven 工具欄,可以繼續進行相關配置並正常使用 Maven。