使用方法
將項目安裝到本地倉庫
mvn install 的作用
運行 mvn install 時,Maven 會執行項目的整個構建生命周期(包括 compile、test、package 等階段),最終將構建的 artifact 安裝到本地倉庫(默認路徑為 ~/.m2/repository)。具體來說:
- 打包 src/main 目錄:src/main 下的代碼(通常是 Java 源代碼、資源文件等)會被編譯并打包成 artifact,例如 JAR、WAR 文件,具體取決于 pom.xml 中的 (如 jar、war)。
- 生成元數據:除了主 artifact(例如 my-project-1.0.0.jar),Maven 還會生成并安裝其他文件到本地倉庫,包括:
- POM 文件:項目的 pom.xml 文件會被復制到本地倉庫,作為 artifact 的元數據文件(例如 my-project-1.0.0.pom)。
- 校驗文件:如 .sha1 或 .md5 文件,用于驗證 artifact 的完整性。
因此,mvn install 不僅打包 src/main 目錄的內容,還會將 pom.xml 及其相關元數據安裝到本地倉庫。
將該項目的gav坐標(pom.xml文件當中最上面的)引入到另一個項目當中即可
擴展:
1.將jar包手動裝入本地倉庫
將 JAR 包手動裝入 Maven 本地倉庫,可以使用 Maven 提供的 mvn install:install-file 命令。以下是詳細步驟和說明:
1. 準備工作
- 確保 Maven 已安裝:運行 mvn -version 檢查 Maven 是否正確安裝。
- 獲取 JAR 包:確認你有需要安裝的 JAR 文件(例如 my-lib.jar)。
- 確定 Maven 坐標:你需要知道 JAR 包的 groupId、artifactId 和 version。如果 JAR 包沒有提供這些信息,可以根據項目或組織自定義。
2.** 使用 mvn install:install-file 指令**
Maven 提供 install:install-file 目標來手動安裝 JAR 包到本地倉庫。基本命令格式如下:
mvn install:install-file \ -Dfile=<JAR文件路徑> \ -DgroupId=<組ID> \ -DartifactId=<工件ID> \ -Dversion=<版本號> \ -Dpackaging=jar
參數說明:
- -Dfile:JAR 文件的路徑(絕對路徑或相對路徑)。
-DgroupId :Maven 坐標的 groupId ,例如 com.example 。
+
-DartifactId :Maven 坐標的 artifactId ,例如 my-lib 。
- -Dversion:版本號,例如 1.0.0。
- -Dpackaging:打包類型,通常為 jar。
示例:
假設你有一個 JAR 文件 my-lib.jar 位于當前目錄,計劃以以下坐標安裝:
groupId : com.example
+
artifactId : my-lib
+
版本 : 1.0.0
運行以下命令:
狂歡
復制
mvn install:install-file \ -Dfile=my-lib.jar \ -DgroupId=com.example \ -DartifactId=my-lib \ -Dversion=1.0.0 \ -Dpackaging=jar
3. 驗證安裝
- 檢查本地倉庫:JAR 包會被安裝到本地倉庫(默認路徑為 ~/.m2/repository 或 %USERPROFILE%.m2\repository)。 根據上述示例,JAR 包會位于: 文本復制
~/.m2/repository/com/example/my-lib/1.0.0/my-lib-1.0.0.jar
你可以導航到該路徑,確認是否存在 my-lib-1.0.0.jar 和 my-lib-1.0.0.pom 文件。 - 在項目中使用:在項目的 pom.xml 中添加依賴,驗證是否能正確引用
2.將jar包安裝到遠程倉庫
1). 確認遠程倉庫配置
要上傳 artifact 到遠程倉庫,需要在 Maven 項目的 pom.xml 文件或 settings.xml 文件中配置遠程倉庫信息。
在 pom.xml 中配置遠程倉庫
在項目的 pom.xml 文件中,添加 標簽,指定遠程倉庫的地址。例如:
<<font style="color:rgb(228, 86, 73);">distributionManagement</font>> <<font style="color:rgb(228, 86, 73);">repository</font>> <<font style="color:rgb(228, 86, 73);">id</font>>my-repo</<font style="color:rgb(228, 86, 73);">id</font>> <<font style="color:rgb(228, 86, 73);">name</font>>My Repository</<font style="color:rgb(228, 86, 73);">name</font>> <<font style="color:rgb(228, 86, 73);">url</font>>http://nexus.example.com/repository/maven-releases/</<font style="color:rgb(228, 86, 73);">url</font>> </<font style="color:rgb(228, 86, 73);">repository</font>> <<font style="color:rgb(228, 86, 73);">snapshotRepository</font>> <<font style="color:rgb(228, 86, 73);">id</font>>my-snapshot-repo</<font style="color:rgb(228, 86, 73);">id</font>> <<font style="color:rgb(228, 86, 73);">name</font>>My Snapshot Repository</<font style="color:rgb(228, 86, 73);">name</font>> <<font style="color:rgb(228, 86, 73);">url</font>>http://nexus.example.com/repository/maven-snapshots/</<font style="color:rgb(228, 86, 73);">url</font>> </<font style="color:rgb(228, 86, 73);">snapshotRepository</font>> </<font style="color:rgb(228, 86, 73);">distributionManagement</font>>
- :用于發布正式版本(release)。
- :用于發布快照版本(snapshot,如 1.0.0-SNAPSHOT)。
- :倉庫的唯一標識,需與 settings.xml 中的認證信息對應。
- :遠程倉庫的地址(例如 Nexus 或 Artifactory 的 URL)。
在 settings.xml 中配置認證信息
遠程倉庫通常需要用戶名和密碼,在 ~/.m2/settings.xml 中添加服務器認證信息:
<<font style="color:rgb(228, 86, 73);">settings</font>> <<font style="color:rgb(228, 86, 73);">servers</font>> <<font style="color:rgb(228, 86, 73);">server</font>> <<font style="color:rgb(228, 86, 73);">id</font>>my-repo</<font style="color:rgb(228, 86, 73);">id</font>> <<font style="color:rgb(228, 86, 73);">username</font>>your-username</<font style="color:rgb(228, 86, 73);">username</font>> <<font style="color:rgb(228, 86, 73);">password</font>>your-password</<font style="color:rgb(228, 86, 73);">password</font>> </<font style="color:rgb(228, 86, 73);">server</font>> <<font style="color:rgb(228, 86, 73);">server</font>> <<font style="color:rgb(228, 86, 73);">id</font>>my-snapshot-repo</<font style="color:rgb(228, 86, 73);">id</font>> <<font style="color:rgb(228, 86, 73);">username</font>>your-username</<font style="color:rgb(228, 86, 73);">username</font>> <<font style="color:rgb(228, 86, 73);">password</font>>your-password</<font style="color:rgb(228, 86, 73);">password</font>> </<font style="color:rgb(228, 86, 73);">server</font>> </<font style="color:rgb(228, 86, 73);">servers</font>> </<font style="color:rgb(228, 86, 73);">settings</font>>
- 必須與 pom.xml 中 的 匹配。
- 如果密碼不宜明文存儲,可以使用加密密碼(參考 Maven 密碼加密)。
2). 確保項目版本正確
- 正式版本:確保 pom.xml 中的 不包含 SNAPSHOT,例如 1.0.0。
- 快照版本:如果版本包含 SNAPSHOT(如 1.0.0-SNAPSHOT),會上傳到 。
3). 執行上傳命令
使用 Maven 的 deploy 命令將 artifact 上傳到遠程倉庫:
狂歡
復制
mvn deploy
- 這會將 artifact 上傳到 pom.xml 中配置的遠程倉庫。
- 如果是快照版本,會上傳到 ;如果是正式版本,會上傳到 。
常見選項
- 跳過測試:如果想在部署時跳過測試,可以使用: 狂歡復制
mvn deploy -DskipTests
- 指定 profile:如果使用特定 profile: 狂歡收起自動更改運行復制
mvn deploy -Pmy-profile
4). 驗證上傳結果
- 檢查遠程倉庫:登錄遠程倉庫的管理界面(如 Nexus 或 Artifactory 的 Web 界面),確認 artifact 是否出現在指定路徑(根據 groupId、artifactId、version 組織)。
- 命令行驗證:如果遠程倉庫支持 HTTP 訪問,可以嘗試通過 curl 或瀏覽器訪問 artifact 的 URL,例如: 文本復制
http://nexus.example.com/repository/maven-releases/com/example/my-project/1.0.0/my-project-1.0.0.jar
3.maven項目繼承
在子模塊當中
通過即可實現引入父工程的pom.xml,避免重復的引入重復的坐標依賴。
4.maven項目聚合
在父模塊當中
父工程打包,整個所有聚合的模塊也都會進行打包,父工程進行什么操作,子模塊也進行什么操作
好處
1. 提高代碼復用性和模塊化
- 模塊拆分:將項目按功能或業務邏輯拆分為多個子模塊(如 core、web、service),每個模塊負責獨立的功能,代碼結構更清晰。
- 依賴共享:子模塊可以共享父模塊定義的依賴和配置,減少重復代碼。例如,父 pom.xml 中統一管理依賴版本,子模塊直接引用。
- 復用性:模塊可以作為獨立的 artifact(如 JAR)被其他項目或模塊復用,降低開發成本。
2. 簡化依賴管理
- 統一版本控制:在父模塊的 pom.xml 中使用 定義依賴版本,子模塊無需重復指定版本,避免版本沖突。
- 內部依賴:子模塊之間可以相互依賴(通過 引用),Maven 自動處理模塊間的構建順序和依賴傳遞。
- 減少沖突:模塊化開發將依賴隔離到具體模塊,降低依賴沖突的風險。