news 2026/5/28 20:41:02

java学习之(Maven pom.xml 详细讲解)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java学习之(Maven pom.xml 详细讲解)

一、什么是 pom.xml?

POM = Project Object Model(项目对象模型)

Maven 项目的核心配置文件 描述项目的各种信息:依赖、构建配置、插件等 类似于前端项目的 package.json

二、pom.xml 的基本结构

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- 1. 项目基本信息 --><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>demo_06</artifactId><version>1.0-SNAPSHOT</version><!-- 2. 父项目 --><parent>...</parent><!-- 3. 项目属性 --><properties>...</properties><!-- 4. 依赖管理 --><dependencies>...</dependencies><!-- 5. 构建配置 --><build>...</build><!-- 6. 仓库配置 --><repositories>...</repositories></project>

三、核心元素详解

3.1 项目坐标(GAV)

Maven 用坐标唯一标识一个项目:

<groupId>org.example</groupId><!-- 组织/公司域名倒序 --><artifactId>demo_06</artifactId><!-- 项目名称 --><version>1.0-SNAPSHOT</version><!-- 版本号 -->

版本号说明:

SNAPSHOT:开发版本,不稳定 RELEASE:正式版本 数字版本:如 1.0.0、2.1.3

完整坐标示例:

org.springframework.boot:spring-boot-starter-web:3.2.3 └─────groupId──────┘└────artifactId────┘└─version─┘

3.2 父项目(parent)

继承另一个项目的配置,避免重复配置:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.3</version><relativePath/><!-- 从中央仓库查找,而不是本地 --></parent>

作用:

继承依赖版本管理(不用写版本号) 继承插件配置 继承 Java 版本设置

为什么需要 parent?

<!-- 有 parent:不需要指定版本 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 版本由 parent 管理 --></dependency><!-- 无 parent:必须指定版本 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.2.3</version><!-- 必须写 --></dependency>

3.3 属性配置(properties)

定义可复用的变量:

<properties><!-- Java 编译版本 --><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><!-- 项目编码 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 自定义属性 --><spring.version>3.2.3</spring.version><mybatis.version>3.5.6</mybatis.version></properties>

使用属性:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring.version}</version><!-- 引用属性 --></dependency>

3.4 依赖管理(dependencies)

这是最重要的部分,声明项目需要哪些外部库:

<dependencies><!-- 每个 dependency 代表一个依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 版本由 parent 管理,可选 --></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version><scope>runtime</scope><!-- 作用范围 --></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope><!-- 编译时需要,运行时由容器提供 --></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope><!-- 只在测试时使用 --></dependency></dependencies>

依赖范围(scope)详解:
依赖范围对照表

scope编译测试运行说明
compile默认范围,所有阶段都需要
provided运行时由容器提供(如 servlet-api)
runtime运行时需要,编译不需要
test仅测试时需要(如 JUnit)
system从本地系统路径加载(不推荐)

3.5 构建配置(build)

配置编译、打包等构建过程:

<build><!-- 最终打包的文件名 --><finalName>myapp</finalName><!-- 插件配置 --><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>org.example.Main</mainClass><!-- 指定启动类 --></configuration></plugin><!-- 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><source>21</source><target>21</target></configuration></plugin></plugins></build>

3.6 仓库配置(repositories)

配置依赖下载源:

<repositories><repository><id>aliyun</id><name>Aliyun Maven Repository</name><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled><!-- 不下载快照版本 --></snapshots></repository></repositories>

四、Spring Boot Starter 说明

Spring Boot 提供了一系列 “starter” 依赖,自动引入相关依赖:
以下是整理后的表格格式:

Starter作用
spring-boot-starter-webWeb 开发(包含 Spring MVC、Tomcat)
spring-boot-starter-data-jpa数据库操作(JPA)
spring-boot-starter-test测试框架
spring-boot-starter-security安全框架
spring-boot-starter-redisRedis 缓存
spring-boot-starter-thymeleaf模板引擎

一个 starter 会引入多个依赖:

<!-- spring-boot-starter-web 实际引入 -->- spring-boot-starter - spring-web - spring-webmvc - tomcat-embed-core - jackson-databind - ...

五、常用 Maven 命令

# 清理编译文件mvn clean# 编译项目mvn compile# 运行测试mvntest# 打包(生成 jar/war)mvn package# 安装到本地仓库mvninstall# 强制更新依赖mvn cleaninstall-U# 查看依赖树mvn dependency:tree

六、最佳实践

6.1 始终使用 parent 管理版本

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.3</version></parent>

6.2 统一管理版本号

<properties><java.version>17</java.version><mybatis.version>3.5.6</mybatis.version></properties><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency>

6.3 合理使用 scope

<!-- 数据库驱动:运行时需要 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- Lombok:编译时需要 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency>

6.4 排除传递依赖

xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency>

七、完整示例

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 项目坐标 --><groupId>com.example</groupId><artifactId>myproject</artifactId><version>1.0.0</version><packaging>jar</packaging><name>My Spring Boot Project</name><description>Demo project for Spring Boot</description><!-- 父项目 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.3</version></parent><!-- 属性配置 --><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!-- 依赖管理 --><dependencies><!-- Web 开发 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 数据库 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version><scope>runtime</scope></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- 测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 构建配置 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

总结

pom.xml 的核心作用:

定义项目身份:groupId、artifactId、version 管理依赖:告诉 Maven 需要哪些第三方库 配置构建:编译、测试、打包等过程的配置 继承公共配置:通过 parent 避免重复配置
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 2:02:05

Hunyuan-MT 7B优化指南:如何提升翻译速度与显存使用效率

Hunyuan-MT 7B优化指南&#xff1a;如何提升翻译速度与显存使用效率 1. 为什么需要优化Hunyuan-MT 7B&#xff1f; Hunyuan-MT 7B作为一款70亿参数的多语言翻译大模型&#xff0c;在实际部署中面临两个主要挑战&#xff1a;翻译速度和显存占用。当处理长文本或高并发请求时&a…

作者头像 李华
网站建设 2026/5/23 2:01:59

PROFINET通讯中的GSD文件避坑指南:以S7-300和S7-200SMART为例

PROFINET通讯中的GSD文件避坑指南&#xff1a;以S7-300和S7-200SMART为例 在工业自动化领域&#xff0c;PROFINET通讯已经成为设备互联的主流选择。作为PROFIBUS国际组织推出的新一代工业以太网标准&#xff0c;PROFINET凭借其开放性、实时性和灵活性&#xff0c;在工厂自动化、…

作者头像 李华
网站建设 2026/5/23 2:02:15

用STM32F103C8T6和DS18B20做个智能温湿度监控器(附OLED显示和代码包)

基于STM32F103C8T6与DS18B20的智能温控系统实战指南 在创客圈子里&#xff0c;温湿度监控一直是个经久不衰的经典项目。这次我们要做的不是简单的温度读数显示&#xff0c;而是一个具备阈值报警、历史数据记录功能的智能监控系统。手头只需一块STM32F103C8T6开发板&#xff08;…

作者头像 李华
网站建设 2026/5/23 2:02:00

突破传统分离技术:BS-RoFormer音乐AI模型实战指南

突破传统分离技术&#xff1a;BS-RoFormer音乐AI模型实战指南 【免费下载链接】BS-RoFormer Implementation of Band Split Roformer, SOTA Attention network for music source separation out of ByteDance AI Labs 项目地址: https://gitcode.com/gh_mirrors/bs/BS-RoForm…

作者头像 李华
网站建设 2026/5/23 2:02:02

QSpinBox数值微调框组件笔记

数值输入&#xff1a;适用于需要用户输入整数值的场景&#xff0c;如设置计算参数、调整数量等。 调整参数&#xff1a;在需要进行微小调整的地方&#xff0c;提供直观的增减按钮。 限制输入范围&#xff1a;当需要确保用户输入在一定范围内时&#xff0c;可以设置参数的最大…

作者头像 李华
网站建设 2026/5/23 2:02:49

AnimateDiff文生视频:快速部署指南,一键启动你的AI视频生成工具

AnimateDiff文生视频&#xff1a;快速部署指南&#xff0c;一键启动你的AI视频生成工具 1. 为什么选择AnimateDiff&#xff1f; 在AI视频生成领域&#xff0c;大多数工具要么需要高性能硬件支持&#xff0c;要么依赖云端服务。AnimateDiff的出现打破了这一局面&#xff0c;它…

作者头像 李华