maven模塊化開發

使用方法

將項目安裝到本地倉庫

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 自動處理模塊間的構建順序和依賴傳遞。
  • 減少沖突:模塊化開發將依賴隔離到具體模塊,降低依賴沖突的風險。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82454.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(11)Service Mesh架構下Java應用實現零信任安全模型

Service Mesh架構下Java應用實現零信任安全模型 ?? TL;DR: 本文詳細介紹如何在Service Mesh架構中實現零信任安全模型,包括身份認證、授權控制、加密通信和持續監控四大核心技術,以及與Istio、Envoy等組件的集成方案。 目錄 零信任安全模型概述關鍵技術實現最佳實踐Service…

修改 K8S Service 資源類型 NodePort 的端口范圍

在 Kubernetes 中&#xff0c;Service 類型為 NodePort 時&#xff0c;默認分配的端口范圍為 30000~32767。如果你希望使用自定義端口&#xff08;如 8080、8888 等&#xff09;&#xff0c;就需要修改 kube-apiserver 的默認配置。 本文將詳細介紹如何修改 Kubernetes 中 Nod…

MySQL 可觀測性最佳實踐

MySQL 簡介 MySQL 是一個廣泛使用的開源關系型數據庫管理系統&#xff08;RDBMS&#xff09;&#xff0c;以其高性能、可靠性和易用性而聞名&#xff0c;適用于各種規模的應用&#xff0c;從小型網站到大型企業級系統。 監控 MySQL 指標是維護數據庫健康、優化性能和確保數據…

CentOS安裝最新Elasticsearch8支持向量數據庫

大家都知道Elasticsearch是支持向量的存儲和查詢的&#xff0c;今天我們來介紹下如何安裝支持向量數據庫的Elasticsearch &#xff0c; 操作環境是CentOS。 成功安裝截圖 大家進入系統shell&#xff0c;跟我執行下面命令進行安裝。 更新系統 [rootlocalhost ~]# sudo yum u…

SDL2常用函數SDL事件處理:SDL_Event|SDL_PollEvent

SDL_Event SDL_Event是個聯合體&#xff0c;是SDL中所有事件處理的核心。 SDL_Event是SDL中使用的所有事件結構的并集。 只要知道了那個事件類型對應SDL_Event結構的那個成員&#xff0c;使用它是一個簡單的事情。 下表羅列了所有SDL_Event的所有成員和對應類型。 Uint32typ…

webpack吐環境分析

需要解決的問題 扣取下來的webpack文件過大 解決思路 用ast將需要的代碼扣下來 結果展示 實現步驟 第一步&#xff1a;我們得知道需要哪些模塊 在入口處&#xff0c;增加模塊記錄 第二步&#xff0c;分析ast代碼 通過分析發現,key 有三種值 分別為NumbericLiteral、StringLi…

微軟語音合成助手資源下載

微軟語音合成助手資源下載 【下載地址】微軟語音合成助手資源下載 微軟語音合成助手是一款基于先進AI技術的文本轉語音工具&#xff0c;能夠將文字內容快速轉換為自然流暢的語音。它支持高度自定義的語音參數&#xff0c;包括語速、音調、發音和停頓等&#xff0c;滿足多樣化需…

青少年編程與數學 02-020 C#程序設計基礎 01課題、C#編程概要

青少年編程與數學 02-020 C#程序設計基礎 01課題、C#編程概要 一、微軟.NET開發平臺1. 核心組件2. 特點3. 應用場景4. 開源與社區5. 版本與更新6. 學習資源 二、C# 編程語言1. 歷史背景2. 語言特性&#xff08;1&#xff09;面向對象&#xff08;2&#xff09;類型安全&#xf…

圖片文件未正確加載?—— Webpack 無法正確解析圖片,生成了一個空的 Base64 URL

如果你打印出的圖片 URL 是 data:image/png;base64, 后面沒有實際的 Base64 數據&#xff0c;可能有以下幾種原因&#xff1a; ??1. 圖片文件未正確加載?? ??可能原因??&#xff1a;圖片路徑錯誤&#xff0c;導致 Webpack 無法正確解析圖片&#xff0c;生成了一個空的…

3D打印仿造+ AI大腦賦能,造出會思考的全景相機

在自然界的生存競賽里&#xff0c;節肢動物堪稱視覺界的 "卷王"&#xff01;那些長著復眼的小機靈鬼&#xff0c;比如蜜蜂、蜻蜓&#xff0c;別看個頭小&#xff0c;視覺能力卻超強。 現在&#xff0c;科學家把它們的眼睛 " 偷"過來啦 —— 不是真偷&…

rabbitmq單機多實例部署

RabbitMQ 單實例部署 單實例部署是指在一臺服務器上運行一個 RabbitMQ 實例。這種部署方式適用于小型應用或開發環境,配置簡單,資源占用較少。單實例部署的核心是安裝 RabbitMQ 并啟動服務,通常需要配置 Erlang 環境,因為 RabbitMQ 是基于 Erlang 編寫的。單實例部署的優勢…

知識宇宙-職業篇:后端工程師

名人說&#xff1a;博觀而約取&#xff0c;厚積而薄發。——蘇軾《稼說送張琥》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄 一、后端工程師的定義與職責1. 什么是后端工程師&#xff1f;2. 主要工作職責 二、…

機試 | vector/array Minimum Glutton C++

題目地址 &#xff1a; C - Minimum Glutton #include<stdio.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {//N:菜肴數&#xff0c;X&#xff1a;總甜度閾值&#xff0c;Y&#xff1a;總咸度閾值int…

【Django ORM】三萬字了解Django ORM的基本概念和基本使用

第一章 Django ORM 概述 1.1 什么是Django ORM 1.1.1 ORM的基本概念 ORM 即對象關系映射&#xff08;Object Relational Mapping&#xff09;&#xff0c;它是一種編程技術&#xff0c;用于在面向對象編程語言&#xff08;如 Python&#xff09;和關系型數據庫&#xff08;如…

在springboot項目中是否可以使用兩個不同地址的redis

在Spring Boot項目中可以通過多數據源配置的方式使用兩個不同地址的Redis實例。以下是具體實現方案 1.依賴配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusio…

JMeter 教程:監控性能指標 - 第三方插件安裝(PerfMon)

目錄 【簡單介紹】 ? PerfMon 插件是什么&#xff1f; &#x1f6e0;? 安裝 PerfMon 插件 方法一&#xff1a;使用 JMeterPluginsManager 安裝&#xff08;推薦&#xff09; &#x1f50c; 安裝完成后組件介紹 &#x1f310; 服務端安裝 ServerAgent&#xff08;用于被…

【后端高階面經:數據庫篇】19、分庫分表查詢困境:無分庫分表鍵時的高效應對

一、分庫分表下的無分片鍵查詢困境 在分布式數據庫架構中,分庫分表通過分片鍵(如買家ID)將數據分散存儲,顯著提升了單表性能和系統擴展性。然而,當業務需要從非分片鍵維度(如賣家ID)進行查詢時,傳統架構暴露出以下核心問題: 1.1 跨分片掃描的性能災難 數據分散性:以…

ARM架構

目錄 哈佛結構 arm指令格式 有符號數的溢出&#xff08;8bit)? 無符號數的進位/借位 CPSR&#xff08;當前程序狀態寄存器&#xff09; ARM模式 arm異常類型 ARMv7架構異常向量表 arm異常的處理流程 arm寄存器 堆棧指針寄存器 arm模式切換流程 LDR指令、STR指令 指…

canvas(三)-動畫3d

在 <canvas> 中實現 3D 動畫通常需要借助 WebGL 技術,因為原生的 2D 上下文(CanvasRenderingContext2D)無法直接支持 3D 渲染。WebGL 是基于 OpenGL ES 2.0 的 JavaScript API,可以直接在瀏覽器中實現高性能的 3D 圖形渲染。以下是關于 <canvas> 3D 動畫的概念…

右鍵打開 pycharm 右鍵 pycharm

文件夾右鍵打開pycharm aaa.reg notepad 右下角把文件格式改為&#xff1a;ansi Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\PyCharm] "Open with PyCharm" "Icon""\"D:\\soft\\PyCharm 2024.1.4\\bi…