前言

在 Java 开发领域,Apache Maven 是一个强大的项目管理和构建自动化工具。而pom.xml文件,作为 Maven 项目的“心脏”,定义了项目的方方面面。本文将带你深入了解pom.xml最常用和最重要的配置项,帮助你快速掌握 Maven 的核心配置。

什么是 POM?

POM(Project Object Model,项目对象模型)是 Maven 的基本工作单元,以 XML 文件(pom.xml)的形式存在。它包含了项目构建、依赖、插件等所有信息。

核心配置项详解

一个典型的pom.xml文件结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- 1. 基本坐标信息 --><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-project</artifactId><version>1.0.0-SNAPSHOT</version><packaging>jar</packaging><!-- 2. 项目信息 --><name>My Project</name><description>A sample Maven project</description><url>https://example.com/my-project</url><!-- 3. 依赖管理 --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies><!-- 4. 属性定义 --><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-boot.version>2.7.0</spring-boot.version></properties><!-- 5. 构建配置 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.7.0</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>11</source><target>11</target></configuration></plugin></plugins></build><!-- 6. 依赖版本管理 (Dependency Management) --><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>

1. 基本坐标 (GAV)

这是 POM 最核心的部分,用于唯一标识一个项目或依赖:

  • <groupId>: 组织或项目的唯一标识,通常使用反向域名(如 com.example)。
  • <artifactId>: 项目本身的名称(如 my-project)。
  • <version>: 项目的版本号(如 1.0.0-SNAPSHOT)。SNAPSHOT表示开发中的快照版本。
  • <packaging>: 打包类型,常见值有 jar (默认), war, pom

2. 依赖管理 (<dependencies>)

这是 Maven 最强大的功能之一,用于声明项目所依赖的库。

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.21</version><scope>compile</scope> <!-- 依赖范围 --></dependency>
</dependencies>
  • 依赖范围 (Scope): 控制依赖在不同阶段的可用性:
    • compile (默认): 在编译、测试、运行时都可用。
    • test: 仅在测试编译和执行阶段可用(如 JUnit)。
    • provided: 编译和测试时需要,但运行时由 JDK 或容器提供(如 Servlet API)。
    • runtime: 编译时不需要,但运行和测试时需要(如 JDBC 驱动)。
    • system: 类似 provided,但需要指定本地系统路径(不推荐)。

3. 属性 (<properties>)

用于定义可重用的变量,提高配置的可维护性。

<properties><java.version>11</java.version><spring.version>5.3.21</spring.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><!-- 使用示例 -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version>
</dependency>

4. 构建配置 (<build>)

定义项目的构建过程,包括使用的插件。

  • <plugins>: 声明构建过程中使用的 Maven 插件。
    • maven-compiler-plugin: 配置 Java 编译器(源码和目标版本)。
    • maven-surefire-plugin: 运行单元测试。
    • maven-jar-plugin / maven-war-plugin: 打包项目。
    • spring-boot-maven-plugin: 为 Spring Boot 应用提供打包和运行支持。

5. 依赖版本管理 (<dependencyManagement>)

这是管理大型项目或模块化项目依赖版本的利器。

  • 在父 POM 或 BOM(Bill of Materials)中使用。
  • 声明依赖的版本,但不直接引入依赖
  • 子模块在 <dependencies> 中声明相同 groupIdartifactId 的依赖时,可以省略 <version>,自动继承 <dependencyManagement> 中定义的版本。
  • 常用于引入像 spring-boot-dependencies 这样的 BOM,统一管理 Spring Boot 生态下所有组件的兼容版本。
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

总结

pom.xml是 Maven 项目的配置中心。掌握其核心配置项:

  1. GAV 坐标:唯一标识项目和依赖。
  2. <dependencies>:声明项目所需库。
  3. <properties>:定义可复用的变量。
  4. <build>:配置构建过程和插件。
  5. <dependencyManagement>:集中管理依赖版本,确保一致性。

通过合理配置这些元素,你可以高效地管理 Java 项目的依赖、构建和发布流程。记住,一个清晰、规范的pom.xml是项目成功的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918232.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918232.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918232.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学习的第四十天-51单片机

一、基本框架第一阶段&#xff1a;1980年、Intel英特尔MCS-51系列&#xff1a;8051型号单片机、工业控制领域、由MCU市场->CPU市场。1、CPU&#xff08;Central Processing Unit&#xff0c;中央处理单元&#xff09;‌是计算机的核心部件&#xff0c;负责执行计算机指令和处…

Linux(17)——Linux进程信号(上)

目录 一、信号速识 ✍️生活中的信号 ✍️技术上的信号 ✍️信号的发送和记录 ✍️信号处理概述 二、产生信号 ✍️通过终端产生信号 ✍️通过函数发送信号 ✍️通过软件产生信号 ✍️通过硬件产生信号 一、信号速识 ✍️生活中的信号 你在网上买了很多件商品&…

使用pytest对接口进行自动化测试

上篇博客中讲述了什么是接口测试&#xff0c;已经自动化接口测试流程&#xff0c;这篇博客总结如何实现接口自动化测试&#xff08;一&#xff09;requestsrequests库是Python对HTTP通信的一个工具&#xff0c;将http协议操作封装成简单的接口&#xff0c;能够让我们高效的编写…

信息安全及防火墙总结

1.1 信息安全现状及挑战信息安全概述 信息安全&#xff1a;防止任何对数据进行未授权访问的措施&#xff0c;或者防止造成信息有意无意泄漏、破坏、 丢失等问题的发生&#xff0c;让数据处于远离危险、免于威胁的状态或特性。 网络安全&#xff1a;计算机网络环境下的信息安全。…

20250808组题总结

A - A Pak Chanek 有一个包含 nnn 个正整数的数组aaa。由于他正在学习如何计算两个数字的向下取整平均值&#xff0c;他希望在他的数组 aaa 上进行练习。当数组 aaa 至少有两个元素时&#xff0c;Pak Chanek 将执行以下三步操作&#xff1a; ∙\bullet∙选择两个不同的索引 ii…

【Python 语法糖小火锅 · 第 5 涮 · 完结】

一、糖味一句话 Python 3.10 的 match-case 把「类型 值 嵌套」一次性拆开&#xff0c; 可读性 10&#xff0c;bug 数 10&#xff0c;if-elif 可以安心退休了。二、1 行示例 3 连发 # ① 值匹配 match status:case 200: msg "ok"case 404: msg "not found&q…

写 SPSS文件系统

写入 SPSS 系统文件&#xff08;.sav、.zsav&#xff09; 以下为相关的 SPSS 命令&#xff08;以大写形式 CAPS 呈现&#xff09; savFileName : str SPSS 数据文件的文件名 以 .sav 结尾的文件使用旧版压缩方案压缩。 以 _uncompressed.sav 结尾的文件不压缩&#xff0c;这在需…

云服务器--阿里云OSS(1)【阿里云OSS简单介绍以及环境准备】

一、阿里云OSS简介 定义&#xff1a;阿里云OSS&#xff08;Object Storage Service&#xff09;是阿里云提供的对象存储服务&#xff0c;支持海量数据的存储和管理。 存储方式&#xff1a;基于“对象存储”&#xff0c;文件以对象形式存储&#xff0c;无需管理文件系统结构。 …

R语言代码加密(1)

1、使用Compiler包library(compiler) cmpfile("1.R")#实现对R脚本的整体加密 compiler::loadcmp("1.Rc")#调用R脚本存在问题是&#xff0c;该方法仅对脚本进行加密。在加载生成的Rc文件后&#xff0c;脚本内具体函数&#xff0c;是可以看到具体内容的。针对…

【面试场景题】通过LinkedHashMap来实现LRU与LFU

文章目录一、LRU与LFU的概念1. LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;2. LFU&#xff08;Least Frequently Used&#xff0c;最不经常使用&#xff09;二、LinkedHashMap的特性三、用LinkedHashMap实现LRU实现代码&#xff1a;原理说明&…

第5章 Excel公式与函数应用指南(2):数学函数

5.2 数学函数 Excel作为强大的数据处理工具,其内置的数学函数体系为用户提供了丰富的计算能力。从基础的四则运算到复杂的指数对数计算,从简单的数值舍入到专业的矩阵运算,Excel的数学函数几乎可以满足各类计算需求。 本节将重点为您解析七个常用且实用的数学函数:求和函…

mysql复制连接下的所有表+一次性拷贝到自己的库

1.导出链接下的所有数据mysqldump -h 地址 -u 数据库名 -p --all-databases --single-transaction --master-data2 > all_dbs.sql2.导入自己的库mysql -h 127.0.0.1 -u root -p < all_dbs.sql3.指定导出某些库mysqldump -u root -p --databases db1 db2 db3 > /path/t…

开发手札:UnrealEngine和Unity3d坐标系问题

最近把一套网络模块和一套组件模块从u3d改造到ue4。网络模块通用性很高&#xff0c;毕竟协议都是通用网络协议&#xff0c;改造后没啥问题。但是改造组件模块的时候就遇到了问题。首先&#xff0c;unity3d的坐标系是标准左手坐标系&#xff0c;如下&#xff1a;同时自己的几何算…

QML 鼠标穿透

事件&#xff1a; 有一个输入框(TextField)&#xff0c;需要实现鼠标悬浮时改变边框颜色&#xff0c;鼠标移出后恢复原来边框颜色&#xff1b; 这时如果需要实现此功能&#xff0c;就得使用到MouseArea&#xff0c;鼠标操作区域填充满整个TextField。 然后实现鼠标移入移入出的…

VR 设备 PCB 怎样凭借高频材料达成高速传输

VR 设备的沉浸式体验依赖于高分辨率图像与低延迟交互&#xff0c;这要求设备内部数据传输速率达到 10Gbps 以上&#xff0c;而印制线路板&#xff08;PCB&#xff09;作为信号传输的核心载体&#xff0c;其材料性能直接决定传输效率。高频材料凭借低介电常数&#xff08;Dk&…

Oracle字段操作

1. 新增字段 -- 新增字段 ALTER TABLE MES.WT_SUPPLEMENT_RECORD ADD (PAR_ATTR3 NUMBER DEFAULT NULL);2. 修改字段类型 -- 修改字段类型 ALTER TABLE MES.WT_SUPPLEMENT_RECORD MODIFY (PAR_ATTR3 VARCHAR2(32));3. 删除字段 -- 删除字段 ALTER TABLE MES.WT_SUPPLEMENT_RECO…

【原创】基于 Flask 的简单文件收集器

在单位内网环境中&#xff0c;我经常需要收集 pdf 格式的记录表。于是我基于 ai ide&#xff0c;开发了一个基于 Flask 开发的轻量级文件上传服务项目&#xff0c;部署在单位飞腾芯的银河麒麟系统上&#xff08;当然由于 python 的跨平台&#xff0c;在 windows 和 mac 上也可部…

学习Java的Day28

今天在昨天完成的留言板项目基础上&#xff0c;我进一步开发了一个酒店房型管理系统。该系统采用MVC架构&#xff0c;主要功能是对酒店房型信息进行增删改查操作。数据库设计方面&#xff0c;我创建了hotel_room_type表&#xff0c;包含以下字段&#xff1a;id&#xff1a;主键…

Leetcode——556. 下一个更大元素 III

题目链接&#xff1a;556. 下一个更大元素 III &#xff08;由于图片上传失败&#xff0c;不贴原题目了&#xff0c;有需要可以前往力扣查看&#xff09; 本文给出该题的单调栈做法&#xff0c;同时绕过所有库函数&#xff0c;所有逻辑均自行实现。 本题的思路就是从右向左按…

Idea打包可执行jar,MANIFEST.MF文件没有Main-Class属性:找不到或无法加载主类

背景&#xff1a;IDEA传统方法【Project structure】-->artifact---->build的模式&#xff0c;打包【Maven】项目&#xff0c;发现生成的可执行jar包&#xff0c;显示【找不到或无法加载主类】。但是用【Maven】的Assembly可以正常生成。期望用传统方法实现打jar包方法&a…