理解 Maven 的 pom.xml 文件
pom.xml 是 Maven 项目的核心文件,它是项目构建、依赖管理、插件配置和项目元数据的主要地方。通过 pom.xml 文件,Maven 知道如何构建项目、下载依赖库、执行测试等任务。每个 Maven 项目都必须包含一个 pom.xml 文件。本文将详细讲解 pom.xml 文件的结构及常见配置项。
1. pom.xml 文件结构
Maven 使用 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.0 http://maven.apache.org/POM/4.0.0/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 项目坐标 --><groupId>com.example</groupId><artifactId>my-app</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><!-- 项目名称与描述 --><name>My App</name><description>My Maven Project</description><!-- 依赖管理 --><dependencies><!-- 依赖项 --></dependencies><!-- 构建配置 --><build><plugins><!-- 插件 --></plugins></build><!-- 项目插件 --><plugins><!-- 插件配置 --></plugins></project>
2. pom.xml 文件常见配置项
2.1 <modelVersion>
- 说明:表示当前 POM 的模型版本。
4.0.0是 Maven 的标准版本,几乎所有 Maven 项目都使用此版本。 - 示例:
<modelVersion>4.0.0</modelVersion>
2.2 <groupId>
- 说明:项目的唯一标识符(组织名),通常与项目所属的公司、组织相关。
groupId是 Maven 用来查找依赖的基础部分。 - 示例:
<groupId>com.example</groupId>
2.3 <artifactId>
- 说明:项目的唯一标识符(项目名)。
artifactId是 Maven 用来定位项目和依赖的第二个组成部分。 - 示例:
<artifactId>my-app</artifactId>
2.4 <version>
- 说明:项目的版本信息,通常使用语义化版本控制(例如:
1.0-SNAPSHOT)。SNAPSHOT版本代表开发中的版本。 - 示例:
<version>1.0-SNAPSHOT</version>
2.5 <packaging>
- 说明:定义了项目的打包类型。常见的值包括:
jar、war、pom、ear等。默认为jar。 - 示例:
<packaging>jar</packaging>
2.6 <name> 和 <description>
- 说明:提供项目的名称和描述信息,方便在 Maven 仓库中查看项目信息。
- 示例:
<name>My App</name> <description>My Maven Project</description>
2.7 <dependencies>
- 说明:该部分用于声明项目的外部依赖。每个
<dependency>元素表示一个依赖库。Maven 会根据这些信息自动下载相关的依赖包。 - 示例:
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.9</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency> </dependencies>
2.8 <dependency> 元素
- 说明:用于定义一个依赖项。它包含以下常见子元素:
<groupId>:依赖的组织/公司。<artifactId>:依赖的名称。<version>:依赖的版本。<scope>:指定依赖的作用域,常见的值包括:compile、provided、runtime、test、system等。
2.9 <build>
- 说明:该部分用于配置构建过程,包括插件、源代码目录、输出目录等。
- 示例:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins> </build>
2.10 <plugin> 配置
- 说明:Maven 插件用于执行特定的任务(例如编译、打包、测试等)。
<plugin>元素用于声明和配置插件。 - 常见插件:
maven-compiler-plugin:用于编译 Java 源文件。maven-surefire-plugin:用于运行测试。maven-jar-plugin:用于创建 JAR 包。
2.11 <repositories> 和 <pluginRepositories>
- 说明:用于指定远程仓库的位置,Maven 会从这些仓库下载依赖和插件。默认情况下,Maven 使用中央仓库,但也可以通过这些元素指定其他仓库。
- 示例:
<repositories><repository><id>central</id><url>https://repo.maven.apache.org/maven2</url></repository> </repositories>
2.12 <properties>
- 说明:定义一些自定义的属性,其他地方可以引用这些属性。常用于定义版本号、编码格式等信息。
- 示例:
<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target> </properties>
3. 示例:完整的 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.0 http://maven.apache.org/POM/4.0.0/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 项目坐标 --><groupId>com.example</groupId><artifactId>my-app</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>My App</name><description>My Maven Project</description><!-- 依赖管理 --><dependencies><!-- Spring Core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.9</version></dependency><!-- JUnit 测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies><!-- 构建配置 --><build><plugins><!-- 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build><!-- 定义 Maven 项目属性 --><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties></project>
4. 总结
pom.xml 文件是 Maven 项目的核心配置文件,它定义了项目的基本信息、依赖关系、插件配置等。理解和掌握 pom.xml 文件的结构和配置项,是有效使用 Maven 进行构建管理的关键。通过配置依赖、插件、构建生命周期等,Maven 能够自动化管理项目的构建过程,提高开发效率和团队协作能力。
相关文章:
理解 Maven 的 pom.xml 文件
pom.xml 是 Maven 项目的核心文件,它是项目构建、依赖管理、插件配置和项目元数据的主要地方。通过 pom.xml 文件,Maven 知道如何构建项目、下载依赖库、执行测试等任务。每个 Maven 项目都必须包含一个 pom.xml 文件。本文将详细讲解 pom.xml 文件的结构…...
docker数据持久化的意义
Docker 数据持久化是指在 Docker 容器中保存的数据不会因为容器的停止、删除或重启而丢失。Docker 容器本身是临时性的,默认情况下,容器内的文件系统是临时的,容器停止或删除后,其中的数据也会随之丢失。为了确保重要数据…...
opentelemetry-collector 配置elasticsearch
一、修改otelcol-config.yaml receivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318 exporters:debug:verbosity: detailedotlp/jaeger: # Jaeger supports OTLP directlyendpoint: 192.168.31.161:4317tls:insecure: trueotlphttp/prometheus: …...
ASP.NET Core JWT Version
目录 JWT缺点 方案 实现 Program.cs IdentityHelper.cs Controller NotCheckJWTVersionAttribute.cs JWTVersionCheckkFilter.cs 优化 JWT缺点 到期前,令牌无法被提前撤回。什么情况下需要撤回?用户被删除了、禁用了;令牌被盗用了&…...
【ArcGIS】R语言空间分析、模拟预测与可视化技术
R语言在空间数据挖掘中具有广泛的应用,以下是一些关键内容和常用包的介绍: R语言空间数据挖掘的关键技术 空间数据类型 矢量数据:包括点(Point)、线(Line)、面(Polygon)等…...
日常知识点之面试后反思遗留问题汇总
梳理一下最近接触到的几个知识点: 1:突然问到端口复用 (SO_REUSEADDR) 端口复用一般用在服务端重启时,套接字处于time_wait状态时,无法绑定该端口,导致无法启动问题。 设置端口复用ÿ…...
链表(LinkedList) 1
上期内容我们讲述了顺序表,知道了顺序表的底层是一段连续的空间进行存储(数组),在插入元素或者删除元素需要将顺序表中的元素整体移动,时间复杂度是O(n),效率比较低。因此,在Java的集合结构中又引入了链表来解决这一问…...
Qt:Qt Creator项目创建
目录 认识Qt Creator Qt Creator概览 使用Qt Creator新建项目 选择项目模板 选择项目路径 选择构建系统 填写类信息设置界面 选择语言和翻译文件 选择Qt套件 选择版本控制系统 最终效果 认识Qt Creator Qt Creator概览 从开始菜单或者快捷方式打开Qt Creator集成开…...
windows11上,使用pipx安装Poetry,Poetry的安装路径是什么?
当使用 pipx 安装 Poetry 时,pipx 会将 Poetry 安装到一个独立的虚拟环境中,并将其可执行文件链接到一个集中的目录中。以下是 pipx 安装 Poetry 时的路径信息: 1. Poetry 的安装路径 pipx 会为每个工具(如 Poetry)创…...
详解状态模式
引言 水有固态、液态、气态三种状态,在不同条件下这三种状态可以相互转化。同样在软件设计中,有些对象也有不同的状态,不同状态的行为不同,状态模式就是用来处理这种情况的。 1.概念 状态模式(State Pattern):允许一个…...
能否通过蓝牙建立TCP/IP连接来传输数据
前言: 最近在做一个项目时,产生了一个疑问:能否通过蓝牙建立TCP/IP连接来传输数据 查阅了一些文章,可以得出结论:不行 下面是我截取的两篇个人认可的文章的回答: 文章一: 蓝牙是一种短距离无…...
uniapp mqttjs 小程序开发
在UniApp中集成MQTT.js开发微信小程序时,需注意平台差异、协议兼容性及消息处理等问题。以下是关键步骤与注意事项的综合指南: 一、环境配置与依赖安装 安装MQTT.js 推荐使用兼容性较好的版本:mqtt4.1.0(H5和小程序兼容性最佳&…...
爬虫工程师分享:获取京东商品详情SKU数据的技术难点与攻破方法
在电商数据领域,京东商品详情页的SKU数据是许多爬虫工程师的目标。这些数据包含了商品的价格、库存、规格等关键信息,对于市场分析、价格监控等应用场景至关重要。然而,获取这些数据并非易事,京东作为国内电商巨头,其反…...
数据库操作与数据管理——Rust 与 SQLite 的集成
第六章:数据库操作与数据管理 第一节:Rust 与 SQLite 的集成 在本节中,我们将深入探讨如何在 Rust 中使用 SQLite 数据库,涵盖从基本的 CRUD 操作到事务处理、数据模型的构建、性能优化以及安全性考虑等方面。SQLite 是一个轻量…...
LeetCode 0063.不同路径 II:动态规划 - 原地使用地图数组,几乎无额外空间开销
【LetMeFly】63.不同路径 II:动态规划 - 原地使用地图数组,几乎无额外空间开销 力扣题目链接:https://leetcode.cn/problems/unique-paths-ii/ 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0]&#…...
elementui:el-table支持搜索、切换分页多选功能,以及数据回显
1、el-table相关代码,需注意:row-key"(row) > { return row.id }" 以及 :reserve-selection"true" <div class"boxList"><div class"search-form"><!-- 搜索表单 --><el-form :inline"true&q…...
深度整理总结MySQL——索引正确使用姿势
索引正确使用姿势 前言MySQL索引优缺点分析✅ 索引的优势⚠️ 索引的代价 如何合理建立索引?——关键原则总结重要的优化机制索引覆盖——通俗的方式讲解索引下推索引跳跃式扫描 前言 这篇文章是补充一些基本概念和实战的一些使用建议. MySQL索引优缺点分析 ✅ 索引的优势 …...
使用LLaMA Factory踩坑记录
前置条件:电脑显卡RTX 4080 问题:LLaMA-Factory在运行的时候,弹出未检测到CUDA的报错信息 结论:出现了以上的报错,主要可以归结于以下两个方面: 1、没有安装GPU版本的pytorch,下载的是CPU版本…...
亚博microros小车-原生ubuntu支持系列:25 二维码控制运动
二维码识别 安装依赖 pip3 install pyzbarsudo apt install libzbar-dev 在用小车识别之前,先用电脑的摄像头测试下基本的识别 import cv2 import rclpy from rclpy.node import Node import pyzbar.pyzbar as pyzbar import numpy as np from ament_index_pyth…...
基于深度学习的人工智能量化衰老模型构建与全流程应用研究
一、引言 1.1 研究背景与意义 1.1.1 人口老龄化现状与挑战 人口老龄化是当今全球面临的重要社会趋势之一,其发展态势迅猛且影响深远。根据联合国的相关数据,1980 年,全球 65 岁及以上人口数量仅为 2.6 亿,到 2021 年,这一数字已翻番,达到 7.61 亿,而预计到 2050 年,…...
像素艺术家紧急预警:Midjourney即将关闭--tile参数兼容性(倒计时14天),现在必须掌握的3种替代渲染方案
更多请点击: https://intelliparadigm.com 第一章:像素艺术家紧急预警:Midjourney即将关闭--tile参数兼容性(倒计时14天) Midjourney v6.5 已正式宣布将于 14 天后终止对 --tile 参数的原生支持,此举将直…...
Deep Lake:AI数据湖与向量数据库一体化管理实践
1. 项目概述:当数据湖遇上深度学习如果你正在构建一个AI应用,无论是图像识别、自然语言处理还是多模态模型,数据管理绝对是你绕不开的“硬骨头”。数据分散在各个文件夹、云存储、数据库里,格式五花八门,加载速度慢&am…...
如何在Chrome浏览器中快速生成与解析二维码:Chrome QRCode插件终极指南
如何在Chrome浏览器中快速生成与解析二维码:Chrome QRCode插件终极指南 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件,用于生成当前URL或者选中内容的…...
终极Photoshop图层批量导出指南:如何用免费脚本提升10倍工作效率
终极Photoshop图层批量导出指南:如何用免费脚本提升10倍工作效率 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in script from Adobe. 项目…...
Midjourney立体主义风格生成成功率骤降?这5个隐藏变量正在 silently corrupt 你的构图——资深提示工程师紧急诊断报告
更多请点击: https://intelliparadigm.com 第一章:Midjourney立体主义风格生成失效的系统性现象确认 近期大量用户反馈,在 Midjourney v6 及后续快速迭代版本中,使用经典立体主义(Cubism)提示词࿰…...
在nodejs后端服务中集成taotoken多模型调用能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Node.js后端服务中集成Taotoken多模型调用能力 1. 项目初始化与环境配置 在开始集成之前,你需要一个已经存在的Node…...
终极指南:erd实体关系图生成器的社区生态与开源贡献全解析
终极指南:erd实体关系图生成器的社区生态与开源贡献全解析 【免费下载链接】erd Translates a plain text description of a relational database schema to a graphical entity-relationship diagram. 项目地址: https://gitcode.com/gh_mirrors/er/erd 你是…...
鸿蒙与Kotlin跨平台开发中的性能与功耗深度优化实践
摘要:本文聚焦KMP(Kotlin Multiplatform)与鸿蒙(ArkTS)集成开发中的性能与功耗优化,结合架构设计、系统级调优及实战案例,提供可落地的解决方案。全文涵盖核心优化领域:内存管理、渲染管线、跨进程通信、功耗模型分析等,适用于中大型项目迁移与重构。 一、KMP跨平台模…...
JavaScript逆向工程的架构演进:Jsxer如何重新定义二进制脚本反编译
JavaScript逆向工程的架构演进:Jsxer如何重新定义二进制脚本反编译 【免费下载链接】jsxer A fast and accurate JSXBIN decompiler. 项目地址: https://gitcode.com/gh_mirrors/js/jsxer 在Adobe创意生态系统中,ExtendScript脚本的JSXBIN二进制格…...
TPS65131模块实战:单电源生成正负双电压的工程指南
1. 项目概述与核心需求解析在模拟电路、音频设备乃至一些复古的数字逻辑电路里,正负双电源轨是一个绕不开的话题。无论是给运算放大器供电,为LCD屏幕提供偏置电压,还是驱动某些老式合成器模块,你常常需要同时拥有一个正电压和一个…...
