Maven常用知識總結

Maven常用知識總結

  • Maven 安裝與配置
    • windows mvn安裝與配置
    • IntelliJ IDEA 配置
      • IntelliJ IDEA 配置系統maven
      • Intellij IDEA Maven使用
      • IntelliJ IDEA 不能運行項目常見問題
  • pom.xml 常用標簽講解
    • parent
    • groupId artifactId version
    • dependency
    • properties
    • plugin
    • packaging
    • dependencyManagement
    • scope
    • optional
    • exclusion
  • mvn 常用命令
      • test編寫
  • 常用maven插件
    • maven-javadoc-plugin
    • maven-compiler-plugin
    • maven-war-plugin maven-jar-plugin
  • 多模塊項目演示
  • Maven多模塊優勢
  • 參考內容

IDE集成開發環境對Maven進行了封裝. 極度簡化,只要很少了解Maven即可. 最近需要將tony/RuoYi-flowable遷移到Spring Boot 3, 系統學習了Maven,對常用內容進行了簡單總結.

本篇主要講解注意事項, 操作上存在部分步驟缺失.

Maven 安裝與配置

windows mvn安裝與配置

Maven 依賴于Java 環境, 注意配置JAVA_HOME 系統環境變量.
同時添加系統環境變量MAVEN_HOME指向maven安裝路徑.

對倉庫進行配置
D:\Maven\mvn3.8.1\conf\settings.xml 配置本地倉庫位置和阿里云鏡像

  <localRepository>D:/Maven/repo</localRepository>
...<mirror><id>aliyun</id><name>Aliyun Maven</name><url>https://maven.aliyun.com/repository/public</url><mirrorOf>central</mirrorOf></mirror>

配置創建項目、模塊的默認語言級別為17

  <profiles><profile><id>development</id><activation><jdk>17</jdk><activeByDefault>true</activeByDefault></activation><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><maven.compiler.compilerVersion>17</maven.compiler.compilerVersion></properties></profile>

在這里插入圖片描述

在這里插入圖片描述
手動修改還會進行警告: 模塊’untitled3’從Maven導入。對其配置做出的任何更改在重新導入后可能丟失。

IntelliJ IDEA 配置

IntelliJ IDEA 配置系統maven

File ->Setting->Build Execution Deployment -> BuildTools -> Maven
在這里插入圖片描述

ps. 不能徹底修改, 每次創建項目都要設置一次.

不配置阿里云,可能會出現如下連接超時的問題.

com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.14.1 failed to transfer from https://repo.maven.apache.org/maven2 during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.14.1 from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.88.215] failed: Connect timed out

Intellij IDEA Maven使用

在這里插入圖片描述

從左到右依次為: 同步項目 執行命令 分析依賴關系 顯示圖

最左側 圖標 同步項目, 中間為執行mvn命令 右側為 查看模塊依賴關系

同步項目: 由于網絡異常關閉等造成maven依賴沒有下載完整, 點擊該按鈕實現重新下載
執行mvn命令: 彈出框 進行mvn命令的選擇或輸入

分析依賴關系

切換模塊, 查看不同模塊的依賴情況.

在這里插入圖片描述

顯示圖

在這里插入圖片描述

IntelliJ IDEA 不能運行項目常見問題

使用 IDEA導入maven項目后不能運行, 主要是jdk配置問題.

文件 -> 項目結構 修改項目\模塊\平臺SDK jdk版本

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

文件 -> 設置 -> 構建 執行 部署 -> 編譯器 -> Java編譯器 修改項目和模塊字節碼版本
在這里插入圖片描述

pom.xml 常用標簽講解

parent

    <parent><artifactId>ruoyi</artifactId><groupId>com.ruoyi</groupId><version>3.8.9</version></parent>

通過parent 子項目共享父項目pom.xml配置.

groupId artifactId version

<dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.5</version></dependency>

groupId(組標識符)通常采用 反向域名規則(類似 Java 包命名)

artifactId(項目標識符)標識項目的唯一名稱,通常是項目或模塊的簡短名稱

version(版本號)

三者合起來稱為依賴坐標.

dependency

    <dependencies><!-- SpringBoot Web容器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>

dependency 自動管理其需要的依賴
在這里插入圖片描述

properties

    <properties><java.version>17</java.version><spring-boot.version>3.3.5</spring-boot.version></properties>

指定工程的版本配置信息,除了可以手動引用外, 也存在父pom自動引入.

plugin

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.songlili.hellospringboot2m.Hellospringboot2mApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>

擴展和定制Maven構建過程.

maven-compiler-plugin:指定 Java 編譯版本為 17,編碼為 UTF-8。
spring-boot-maven-plugin:配置 Spring Boot 打包插件,指定主類為 Hellospringboot2mApplication,跳過打包并執行 repackage 目標。

packaging

    <packaging>jar</packaging>

jar\war:指定打包形式
pom: 表示這是一個 Maven 項目對象模型(POM)文件,用于定義項目依賴、構建配置等信息

dependencyManagement

    <dependencyManagement><dependencies><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.5</version> </dependency></dependencyManagement>

定義在頂層項目中, 對整個項目進行版本統一管理. 子pom 引入依賴時, 不需要指定版本.

子pom.xml

  <dependencies><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId></dependency></dependencies>

當然, 子模塊需要其他版本, 可以自定義version.

如果父 POM 直接在 (非 )中聲明 jarA,則所有子模塊會強制繼承該依賴和版本. 子模塊無法覆蓋版本,除非使用 排除父依賴后重新聲明。

ps: 如果dependencyManagement.dependencies 添加依賴莫名報錯, 可以嘗試 將dependency在(非 )進行聲明并進行Maven同步. 然后再去掉.

scope

dependencies.dependency 添加scope. scope默認值為compile.

scope編譯階段測試階段運行階段
compile可用可用可用
provided可用可用
runtime可用
test可用

optional

dependencies.dependency.optional 指定依賴是否可以傳遞

moduleA

            <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.9</version><optional>true</optional></dependency>

moduleB

        <dependency><groupId>com.ruoyi</groupId><artifactId>moduleA</artifactId></dependency>

moduleB 依賴 moduleA, 不能獲取 gson 依賴. new Gson() 提示無法導入.

moduleC

  <parent><artifactId>moduleA</artifactId><groupId>com.ruoyi</groupId><version>3.8.9</version></parent>

moduleC new Gson() 就可以實現對Gson導入.

exclusion

            <!-- Swagger3依賴 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>${swagger.version}</version><exclusions><exclusion><groupId>io.swagger</groupId><artifactId>swagger-models</artifactId></exclusion></exclusions></dependency>

引入 springfox-boot-starter,用于支持 Swagger3 接口文檔的自動生成;
排除 io.swagger:swagger-models,避免版本沖突或使用自定義版本。

mvn 常用命令

mvn clean   # 清理生成的target.
mvn compile  # 將源代碼編譯成可執行文件 .class
mvn test     #  執行 test
mvn install  #  打包后安裝到本地倉庫.  
mvn clean package  # 清理變紅重新打包
mvn dependency:tree  #  查看依賴樹
mvn dependency:list  #  查看依賴列表

test編寫

test 添加依賴

<dependencies><dependency><groupId>name.remal.tools.test</groupId><artifactId>junit5</artifactId><version>1.26.147</version></dependency>
</dependencies>

test 命名規范

    測試類名: **/Test*.java (如 TestUserService.java)測試類名: **/*Test.java (如 UserServiceTest.java)測試類名: **/*Tests.java (如 UserServiceTests.java)測試類名: **/*TestCase.java (如 UserServiceTestCase.java)
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;public class UserServiceTest {@Testpublic void testUserCreation() {assertTrue(true, "示例測試");}
}

常用maven插件

maven-javadoc-plugin

    <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>3.4.1</version></plugin></plugins></build>

mvn javadoc:javadoc 即可生成api說明.

maven-compiler-plugin

 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding><compilerArgs><arg>-parameters</arg></compilerArgs></configuration></plugin></plugins></build>

使用 maven-compiler-plugin 插件編譯 Java 代碼

maven-war-plugin maven-jar-plugin

<plugin>   <groupId>org.apache.maven.plugins</groupId>   <artifactId>maven-war-plugin</artifactId>   <version>3.1.0</version>   <configuration><failOnMissingWebXml>false</failOnMissingWebXml><warName>${project.artifactId}</warName></configuration>   </plugin>   

配合 jar , 這兩個僅僅需要寫一個即可. 設置war插件, 就將默認打包打包方式設置為jar. 反之, 設置jar插件, 就將默認打包方式設置為war.

mvn jar:jar
mvn war:war

多模塊項目演示

  1. 使用idea 新建一個普通的mvn項目, 刪除生成的src目錄
  2. 在其內部新建->模塊 module-api
    外層pom.xml 新增 modules
    <modules><module>module-api</module></modules>

外層模塊通過 dependencyManagement 標簽管理,進行依賴版本的統一管理.
module-api pom.xml

    <parent><groupId>com.songlili</groupId><artifactId>multimodulesapp</artifactId><version>1.0-SNAPSHOT</version></parent>

在根目錄或 module-api 執行 mvn clean package 都可以實現 module-api打包.
3. 新增spring web 模塊 module-web, 添加對module-api的依賴

   <dependency><groupId>com.samunlisa</groupId><artifactId>module-api</artifactId><version>1.0-SNAPSHOT</version></dependency>

新創建的module-web, 默認不作為子module存在需要進行手動調整. 刪除groupId, 添加parent標簽

    <parent><groupId>com.songlili</groupId><artifactId>multimodulesapp</artifactId><version>1.0-SNAPSHOT</version></parent>

ps: 發生ide提示代碼報錯, 卻又可以運行. 可以通過 文件 -> 使緩存生效 試一下.

Maven多模塊優勢

多模塊項目是指一個大型項目被劃分為多個獨立的子模塊或子項目,并且這些子模塊之間存在一定的依賴關系。每個子模塊可以單獨進行開發、構建和部署,同時也可以作為整個項目的一部分進行集成。

將大型項目分解為獨立的子模塊. 使得項目結構更清晰,各個模塊的職責和功能劃分更明確,便于開發人員理解和維護.

依賴問題不能處理時, 通過 mvn dependency:tree將生成的文檔保存起來丟給deepseek進行分析.

  1. 父模塊通過modules添加子模塊的依賴,使他們可以作為整體的一部分進行構建和部署.
  2. 將通用配置放到父模塊中, 避免在每個子模塊中重復配置相同的內容.
  3. 通過父模塊dependencyManagment, 確保所有子模塊使用相同的版本, 確保依賴一致性和版本兼容性.
  4. 將項目拆分為各個模塊,不同模塊由不同團隊開發,提高項目開發效率與速度.
  5. 通過將公共代碼或庫模塊化,可以在多個子模塊中共享和重用代碼,減少代碼冗余,提高開發效率。

參考內容

【立零說】Maven 基礎 入門教程 安裝與配置 項目管理…

若依 前后端分離版 升級到SpringBoot3 教程

maven項目(創建跟導入)設置默認Language level JDK

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

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

相關文章

PHP框架在大規模分布式系統的適用性如何?

曾幾何時&#xff0c;PHP被貼上“只適合小網站”的標簽。但在技術飛速發展的今天&#xff0c;PHP框架&#xff08;如Laravel、Symfony、Hyperf、Swoft等&#xff09; 早已脫胎換骨&#xff0c;勇敢地闖入了大規模分布式系統的疆域。今天&#xff0c;我們就來聊聊它的真實戰斗力…

DC-DC降壓轉換5.5V/3A高效率低靜態同步降壓轉換具有自適應關斷功能

概述&#xff1a;PC1032是一款高效且體積小巧的同步降壓轉換器&#xff0c;適用于低輸入電壓應用。它是緊湊設計的理想解決方案。其2.5V至5.5V的輸入電壓范圍適用于幾乎所有電池供電的應用。在中等至重負載范圍內&#xff0c;它以1.5MHz&#xff08;典型值&#xff09;的PWM模式…

min_25篩學習筆記+牛客多校02E

本來沒有學習這種較難的算法的想法的&#xff0c;因為比賽也做不到這種難度的題&#xff0c; 但是最近打牛客多校02&#xff0c;有一題要求 [1,n][1,n][1,n] 中素數的個數&#xff0c;我以為是像莫反一樣容斥&#xff0c;但是后面感覺不行。賽后知道是用 min_25 篩來求&#xf…

FunASR Paraformer-zh:高效中文端到端語音識別方案全解

項目簡介 FunASR 是阿里巴巴達摩院開源的端到端語音識別工具箱,集成了多種語音識別、語音活動檢測(VAD)、說話人識別等模塊。其中 paraformer-zh 和 paraformer-zh-streaming 是針對中文語音識別任務優化的端到端模型,分別適用于離線和流式場景。Paraformer 采用并行 Tran…

數據結構自學Day9: 二叉樹的遍歷

一、二叉樹的遍歷“遍歷”就是按某種規則 依次訪問樹中的每個節點&#xff0c;確保 每個節點都被訪問一次且只訪問一次遍歷&#xff1a;前序 中序 后序&#xff08;深度優先&#xff09;&#xff0c;層序&#xff08;廣度優先&#xff09;類型遍歷方法特點深度優先遍歷前序、中…

Leetcode(7.16)

求二叉樹最小深度class Solution {public int minDepth(TreeNode root) {if (root null) {return 0;}Queue<TreeNode> queue new LinkedList<>();queue.offer(root);int depth 0;while (!queue.isEmpty()) {depth;int levelSize queue.size();for (int i 0; i…

Go從入門到精通(25) - 一個簡單web項目-實現鏈路跟蹤

Go從入門到精通(25) 一個簡單web項目-實現鏈路跟蹤 文章目錄Go從入門到精通(25)前言為什么需要分布式鏈路跟蹤&#xff1f;go實現鏈路跟蹤搭建zipkin 服務安裝依賴添加tracing包&#xff0c;OpenTelemetry 和Zipkin在 Gin 中集成 OpenTelemetry 中間件log包添加獲取traceId方法…

2025年最新秋招java后端面試八股文+場景題

一、Java核心八股文&#xff08;2025年最新版&#xff09;1. Java基礎HashMap vs ConcurrentHashMapHashMap&#xff1a;非線程安全&#xff0c;JDK1.8后采用數組鏈表/紅黑樹&#xff0c;擴容時可能死循環&#xff08;JDK1.7&#xff09;。ConcurrentHashMap&#xff1a;JDK1.8…

esp32 sd卡

ref&#xff1a; platform io & arduino Boards — PlatformIO latest documentation https://github.com/espressif/arduino-esp32/blob/master/libraries/SD_MMC/README.md SD 卡實驗 | 極客俠GeeksMan GitHub - fabianoriccardi/ESPLogger: An Arduino library pro…

Java學習--------消息隊列的重復消費、消失與順序性的深度解析?

在 Java 分布式系統開發中&#xff0c;消息隊列的應用已十分普遍。但隨著業務規模擴大&#xff0c;消息的重復消費、意外消失、順序錯亂等問題逐漸成為系統穩定性的隱患。本文將從 Java 開發者的視角&#xff0c;深入分析這三大問題的產生原因、業務后果&#xff0c;并結合具體…

【Oracle】centos7離線靜默安裝oracle11g(p13390677_112040)

博文地址&#xff1a;https://blog.csdn.net/gitblog_06670/article/details/142569814 倉庫地址&#xff1a;https://gitcode.com/Open-source-documentation-tutorial/31eb1/?utm_sourcedocument_gitcode&indexbottom&typecard 參考安裝地址&#xff1a; 收費版&…

智能設備暢想

### 智能設備暢想 突然想到了一個好主意 因為最近在查無人機的相關資料&#xff08;很早之前就想搞個無人機玩玩但始終沒有買&#xff09; 在了解自組裝方面的內容時&#xff0c;和AI溝通了下 正好之前組裝的 小智AI 基本上已經完善了&#xff0c;也正在考慮其在其他方向拓展的…

SpringAI——ChatModel

我的前面一篇文章&#xff08;SpringAI——ChatClient配置與使用&#xff09;中講了ChatClient&#xff0c;它是一個構建于 ChatModel 之上的高層封裝&#xff0c;它提供了更豐富的對話交互能力。可以這么說ChatModel相當于發動機&#xff0c;ChatClient相當于一臺含有發動機、…

Zabbix監控K8S的PV信息詳細教程!

文將介紹如何使用Zabbix自定義鍵值腳本方式監控K8S的PV卷狀態等信息。 在Kubernetes (K8S) 中&#xff0c;PersistentVolume (PV) 是集群中的一個抽象層&#xff0c;它代表了底層存儲資源&#xff0c;例如網絡存儲系統&#xff08;如NFS、Ceph、GlusterFS等&#xff09;或本地存…

wx小程序原生開發使用高德地圖api

第一步&#xff1a;注冊高德地圖api的key第二步&#xff1a;下載amap-wx.js 放到項目的某個目錄第三步&#xff1a;配置app.json&#xff08;必須&#xff0c;因為需要定位功能&#xff0c;&#xff09;"requiredPrivateInfos": ["getLocation"],"per…

如何通過mac的前24bit,模糊確認是那一臺什么樣的設備

MAC Address Lookup - MAC/OUI/IAB/IEEE Vendor Manufacturer Search Wireshark ? Go Deep 上面這兩個網址提供了&#xff0c;正對mac 的前24位&#xff0c;查找對應的網絡設備廠商信息&#xff0c;可以讓我們在運維過程中模糊的判斷大約是什么型號的設備 使用macvendorloo…

【爬蟲】04 - 高級數據存儲

爬蟲04 - 高級數據存儲 文章目錄爬蟲04 - 高級數據存儲一&#xff1a;加密數據的存儲二&#xff1a;JSON Schema校驗三&#xff1a;云原生NoSQL(了解)四&#xff1a;Redis Edge近端計算(了解)五&#xff1a;二進制存儲1&#xff1a;Pickle2&#xff1a;Parquet一&#xff1a;加…

UDP和TCP的主要區別是什么?

在網絡通信中&#xff0c;TCP&#xff08;傳輸控制協議&#xff09;和UDP&#xff08;用戶數據報協議&#xff09;是兩種核心的傳輸層協議。它們各自的特點和應用場景截然不同&#xff0c;理解兩者的區別對于選擇合適的通信方式至關重要。本文將通過幾個關鍵點&#xff0c;用簡…

Softhub軟件下載站實戰開發(十八):軟件分類展示

Softhub軟件下載站實戰開發&#xff08;十八&#xff09;&#xff1a;軟件分類展示 &#x1f5a5;? 在之前文章中&#xff0c;我們實現了后臺管理相關部分&#xff0c;本篇文章開始我們來實現用戶端頁面&#xff0c;由于內網使用&#xff0c;不需要sso優化等特性&#xff0c;我…

linux--------------------BlockQueue的生產者消費模型

1.基礎BlockingQueue的生產者消費模型 1.1 BlockQueue 在多線程編程中阻塞隊列是一種常用于實現生產者和消費者模型的數據結構&#xff0c;它與普通的隊列區別在于&#xff0c;當隊列為空時&#xff0c;從隊列獲取元素的操作將被阻塞&#xff0c;直到隊列中放入了新的數據。當…