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
多模塊項目演示
- 使用idea 新建一個普通的mvn項目, 刪除生成的src目錄
- 在其內部新建->模塊 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進行分析.
- 父模塊通過modules添加子模塊的依賴,使他們可以作為整體的一部分進行構建和部署.
- 將通用配置放到父模塊中, 避免在每個子模塊中重復配置相同的內容.
- 通過父模塊dependencyManagment, 確保所有子模塊使用相同的版本, 確保依賴一致性和版本兼容性.
- 將項目拆分為各個模塊,不同模塊由不同團隊開發,提高項目開發效率與速度.
- 通過將公共代碼或庫模塊化,可以在多個子模塊中共享和重用代碼,減少代碼冗余,提高開發效率。
參考內容
【立零說】Maven 基礎 入門教程 安裝與配置 項目管理…
若依 前后端分離版 升級到SpringBoot3 教程
maven項目(創建跟導入)設置默認Language level JDK