当前位置: 首页 > news >正文

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.lryc.cn/news/593640.html

相关文章:

  • 代码随想录算法训练营第二十天|回溯part02
  • 电阻耐压参数学习总结
  • 动态规划——数位DP经典题目
  • 【深度学习-Day 38】破解深度网络退化之谜:残差网络(ResNet)核心原理与实战
  • 从0到1搭建一个Rag引擎(ollama+Qwen3)
  • 实现el-select下拉框,下拉时加载数据
  • Docker容器原理和启动策略
  • EP01:【Python 第一弹】基础入门知识
  • aosp15实现SurfaceFlinger的dump输出带上Layer详细信息踩坑笔记
  • 生成式人工智能实战 | 自回归模型详解与实现
  • Linux中添加重定向(Redirection)功能到minishell
  • QGIS和QGC软件的区别
  • LVS部署模式NAT集群案例
  • buildroot运行qemu进行pcie设备模拟,开发驱动的方式
  • 【学习记录】智能客服小桃(进度更新ing)
  • 测试计划(抽奖系统)
  • Redis Sentinel哨兵集群
  • STC增强型单片机寄存器 PWM EEPROM TMOD TCON
  • ElasticSearch:商品SKU+SPU实现join查询,设计及优化
  • JavaScript 中的继承
  • ADC选型设计
  • OpenCV 官翻 4 - 相机标定与三维重建
  • (LeetCode 每日一题) 1233. 删除子文件夹 (排序)
  • 数据集下载网站
  • aosp15上SurfaceFlinger的dump部分新特性-无Layer相关详细信息输出如何解决?
  • 基于Electron打包jar成Windows应用程序
  • 【2025/07/19】GitHub 今日热门项目
  • 【逻辑回归】MAP - Charting Student Math Misunderstandings
  • 2023 年 5 月青少年软编等考 C 语言八级真题解析
  • [故障诊断方向]基于二维时频图像和数据增强技术的轴承故障诊断模型