【maven】pom.xml 文件详解

有关 maven 其他配置讲解参考
maven 配置文件 setting.xml 详解
pom.xml 文件是 Maven 项目的核心配置文件,其中包含了项目的元数据构建配置依赖管理等信息。以下是一个 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/xsd/maven-4.0.0.xsd"><!-- 项目基本信息 --><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-project</artifactId><version>1.0.0</version><!-- 项目依赖配置 --><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.8.RELEASE</version></dependency><!-- 其他依赖配置 --></dependencies><!-- 构建配置 --><build><!-- 插件配置等 --></build><!-- 其他配置 -->
</project>

1、<project> 元素: 顶层元素,定义整个 Maven 项目。

<modelVersion> 元素: Maven 模型的版本号,当前版本为 4.0.0。

<groupId> 元素: 项目组标识符,通常采用反转的域名风格。

<artifactId> 元素: 项目的唯一标识符。

<version> 元素: 项目的版本号。

<packaging> 元素用于指定 Maven 项目的打包方式,即最终产物的类型。该元素位于 pom.xml 文件的 <project> 元素下。以下是 <packaging> 元素的常见取值:

  • jar(默认值): 生成 JAR 文件。

    <packaging>jar</packaging>
    
  • war: 生成 WAR 文件,用于部署到 Java Web 容器(如 Tomcat)。

    <packaging>war</packaging>
    
  • pom: 用于聚合其他 Maven 项目,不生成实际的构建产物。 POM 项目可以用于聚合多个子项目,将它们组织成一个逻辑单元。父项目的 POM 文件中可以包含一些通用的配置信息,例如依赖管理、插件配置等,这样子项目可以继承这些配置,减少重复的配置工作。使用 POM 项目作为父项目进行项目聚合在微服务系统中是一种常见的做法

    <project><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-parent</artifactId><version>1.0.0</version><packaging>pom</packaging> <!-- 聚合项目的打包方式为 POM --><!-- 子项目列表 --><modules><module>module1</module><module>module2</module><!-- ... 其他子项目 ... --></modules><!-- 其他聚合项目的配置 -->
    </project>
    
  • ear: 生成 Enterprise Archive(EAR)文件,用于部署到 Java EE 应用服务器。

    <packaging>ear</packaging>
    
  • maven-plugin: 用于构建 Maven 插件。

    <packaging>maven-plugin</packaging>
    
  • bundle: 用于构建 OSGi bundle。

    <packaging>bundle</packaging>
    
  • 其他自定义类型: Maven 允许用户定义自己的打包类型,例如一些特定的构建工具或应用程序类型。

    <project><!-- 其他项目配置 --><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-project</artifactId><version>1.0.0</version><!-- 指定打包方式为 JAR --><packaging>jar</packaging><!-- 其他项目配置 --></project>
    

    通过设置 元素,可以指定 Maven 构建工具在执行 mvn package 等构建命令时生成特定类型的构建产物。不同的打包方式会影响最终生成的文件类型和结构。

2、<properties> 元素是 Maven POM 文件中用于定义项目属性的部分。

<properties> 中,你可以定义一些变量,然后在 POM 文件的其他地方引用这些变量,以便在整个项目中统一管理一些配置信息。以下是一个简单的示例,展示了如何在 <properties> 中定义属性:

<project><!-- 其他项目配置 --><properties><java.version>1.8</java.version><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 其他属性的定义 --></properties><!-- 其他项目配置 --></project>

3、<dependencies> 元素: 定义项目的依赖关系。

<dependency> 元素: 声明一个依赖,包含 <groupId><artifactId><version> 等元素。
<dependencyManagement> 元素是 Maven POM 文件中的一个重要部分,用于集中管理项目中所有模块的依赖版本信息。通过配置 <dependencyManagement>包住的<dependencies>,可以确保项目中的所有模块都使用相同版本的依赖,从而减少版本冲突的可能性。子项目可以通过继承父项目的 部分,自己的 pom 文件依赖版本号可以省略,从而使用父项目中定义的依赖版本。

4、<build> 元素: 定义项目的构建配置。

<plugins> 元素: 插件配置,例如 Maven Compiler 插件、Maven Surefire 插件等。

5、 <distributionManagement>用于配置 Maven 构建输出的分发管理信息

它主要用于指定 Maven 构建结果的发布位置,包括发布到 Maven 仓库、远程仓库、FTP 服务器等。
以下是 <distributionManagement> 的一个简单示例:

<project><!-- 其他项目配置 --><distributionManagement><repository><id>my-repo</id><url>https://example.com/maven-repo</url></repository><snapshotRepository><id>my-snapshot-repo</id><url>https://example.com/maven-snapshot-repo</url></snapshotRepository></distributionManagement><!-- 其他项目配置 --></project>

在上述示例中,<distributionManagement> 配置了两个部分:

<repository>:用于发布正式版本(Release)。指定了 Maven 正式版本构建结果的发布位置,包括 id(标识符)和 url(发布的 URL)。正式版本和快照版本参考【maven】正式版本和快照版本详解

<snapshotRepository>:用于发布快照版本(Snapshot)。类似于 <repository>,但用于发布 Maven 快照版本。

这样配置后,当运行 mvn deploy 命令时,Maven 将会把构建结果发布到指定的仓库中。在实际项目中,根据实际需要,可以根据 <distributionManagement> 配置发布到不同的 Maven 仓库或其他存储位置。通常情况下我们的版本号带有后缀-SNAPSHOT ,发布的就是快照版本。在 pom.xml 文件中将项目的版本号修改为正式版本号,去掉 -SNAPSHOT 后缀, 接着遵循正式发布版本操作打标签等,再发布就是正式版本。

需要注意的是,<distributionManagement> 中的配置通常与 Maven 仓库管理工具(如 Nexus、Artifactory)等结合使用,以实现更灵活的构建发布管理。

6、其他配置: 还可以包含其他配置元素,

例如 <repositories>(定义项目使用的远程仓库)、<properties>(定义属性)、<profiles>(定义不同环境的配置)等。和setting.xml 相似,具体可参考【maven】setting.xml文件详解。

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

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

相关文章

测试:抓包工具

抓包工具是网络安全和软件测试领域中非常重要的工具&#xff0c;它能够帮助用户捕获、分析和修改网络数据包。这些工具对于开发人员、测试人员以及安全研究人员来说都非常实用&#xff0c;因为它们可以用来监测网络流量、定位问题、分析协议以及进行安全评估。 Fiddler Fiddl…

代码随想录 Leetcode27. 移除元素

题目&#xff1a; 代码(首刷看解析 2023年12月28日)&#xff1a; class Solution { public:int removeElement(vector<int>& nums, int val) {int n nums.size();int slowIndex 0;for(int fastIndex 0; fastIndex < n; fastIndex){if(val ! nums[fastIndex])…

电影“AI化”已成定局,华为、小米转战入局又将带来什么?

从华为、Pika、小米等联合打造电影工业化实验室、到Pika爆火&#xff0c;再到国内首部AI全流程制作《愚公移山》开机……业内频繁的新动态似乎都在预示着2023年国内电影开始加速进入新的制片阶段&#xff0c;国内AI电影热潮即将来袭。 此时以华为为首的底层技术科技企业加入赛…

leaflet学习笔记-地图缩略图(鹰眼)的添加(三)

介绍 地图缩略图控件有助于用户了解主窗口显示的地图区域在全球、全国、全省、全市等范围内的相对位置&#xff0c;也称为鹰眼图。Leaflet提供了好几种地图缩略图控件&#xff0c;本文介绍其中一个最常用控件&#xff0c;即插件Leaflet.MiniMap。 依赖添加 这些地图控件都可以…

清除conda和pip缓存的方法

conda 清除conda缓存中的所有包、索引和临时文件&#xff0c; conda clean --all 只清除conda缓存中的包&#xff0c;而不清除索引和临时文件 &#xff0c; conda clean --packages pip 清除pip缓存中的所有包和索引文件&#xff0c; pip cache purge

使用机器学习进行语法错误检测/纠正

francescofranco_39234 一、说明 一般的学习&#xff0c;特别是深度学习&#xff0c;促进了自然语言处理。各种模型使人们能够执行机器翻译、文本摘要和情感分析——仅举几个用例。今天&#xff0c;我们将研究另一个流行的用途&#xff1a;我们将使用Gramformer构建一个用于机器…

时间序列系列03-统计模型

时间序列统计模型是用来描述和预测时间序列数据的数学模型。这些模型通常基于过去的观测值&#xff0c;并假设时间序列的行为是可预测的。以下是一些常见的时间序列统计模型&#xff1a; 1. 自回归移动平均模型&#xff08;ARMA&#xff09;&#xff1a; ARMA 模型是由自回归…

vue常见面试题

1. Vue的最大优势是什么? 简单易学, 轻量级整个源码js文件不大, 双向数据绑定, 数据驱动视图, 组件化, 数据和视图分离, vue负责关联视图和数据, 作者中国人(尤雨溪), 文档都是中文的, 入门教程非常多, 上手简单. 相比传统网页, vue是单页面可以只刷新某一部分 2. Vue和jQ…

使用mysqldump命令备份数据库

在MySQL数据库管理中&#xff0c;备份和恢复数据库是非常重要的操作。备份可以帮助我们在数据丢失或者出现其他问题时恢复数据&#xff0c;而恢复可以帮助我们将备份的数据重新导入到数据库中。本文将详细介绍如何备份和恢复MySQL数据库。 一、备份MySQL数据库 使用mysqldump命…

数据结构常见算法总结

图的广度遍历 初始化visited[]数组for 对未访问过的顶点调用广度优先遍历算法广度优先遍历 先将参数送进来的序号对应的visited[v]置为true&#xff0c;并将v入队队列Q不空时循环&#xff1a;遍历Q中元素&#xff0c;并将未访问过的边表结点入队 bool visited[max_vex_num];…

React学习计划-React16--React基础(七)redux使用与介绍

笔记gitee地址 一、redux是什么 redux是一个专门用于做状态管理的js库&#xff08;不是react插件库&#xff09;它可以用在react、angular、vue的项目中&#xff0c;但基本与react配合使用作用&#xff1a;集中式管理react应用中多个组件共享的状态 二、什么情况下需要使用r…

sheng的学习笔记-卷积神经网络

源自吴恩达的深度学习课程&#xff0c;仅用于笔记&#xff0c;便于自行复习 导论 1&#xff09;什么是卷积神经网络 卷积神经网络&#xff0c;也就是convolutional neural networks &#xff08;简称CNN&#xff09;&#xff0c;使用卷积算法的神经网络&#xff0c;常用于计…

感染了后缀为.[sqlback@memeware.net].2700勒索病毒如何应对?数据能够恢复吗?

导言&#xff1a; 近期&#xff0c;[sqlbackmemeware.net].2700 勒索病毒成为网络安全的一大威胁。该勒索病毒采用高度复杂的加密算法&#xff0c;将用户文件加密并勒索赎金。了解该病毒的特征对于有效恢复被加密数据以及预防进一步感染至关重要。如果受感染的数据确实有恢复的…

Ubuntu Desktop 软件包管理

Ubuntu Desktop 软件包管理 ubuntu desktop 常见的包格式有 deb, AppImage, snap 等。本文介绍这几种格式软件的安装方法。 1.deb 格式 使用 apt 命令管理 deb 包 详细查看 man apt。 apt是一个命令行程序&#xff0c;用于在Ubuntu&#xff0c;Debian和基于Debian的Linux发…

linux 网络工具(一)

linux 网络工具 1. nmcli命令1.1 介绍1.2 networking 网络控制1.3 connection 连接管理1.4 device 设备管理1.5 nmcli 返回状态码 2. ifcfg命令家族2.1 ifconfig2.2 route2.3 netstat 3. 静态路由CentosUbuntu - netplanUbuntu - network-manager 1. nmcli命令 1.1 介绍 RHEL…

Vue - 计算属性的妙用

计算属性的运用 Vue 组件的计算属性是一种通过对已有数据进行实时计算&#xff0c;生成新的数据的方式。在下面的代码中&#xff0c;我们通过计算属性 publishedBooksMessage 实时展示作者发布的书籍信息。 <template><div><p>作者: {{ author.name }}<…

工具系列:TimeGPT_(6)同时预测多个时间序列

TimeGPT提供了一个强大的多系列预测解决方案&#xff0c;它涉及同时分析多个数据系列&#xff0c;而不是单个系列。该工具可以使用广泛的系列进行微调&#xff0c;使您能够根据自己的特定需求或任务来定制模型。 # Import the colab_badge module from the nixtlats.utils pac…

ubuntu 使用openssl制作一个自签名证书

我们需要为浏览器创建自己的根CA证书来信任自签名证书。因此&#xff0c;让我们首先创建根CA证书 创建根CA证书 创建文件夹 mkdir openssl && cd openssl执行以下openssl命令&#xff0c;生成 rootCA.key 以及 rootCA.crt. 用你的域名或者ip地址替换demo.mlopshub.c…

如何将自己的项目上传到github上,并进行项目管理

将项目上传到GitHub并进行项目管理是一个多步骤的过程。以下是一个简单的示例&#xff0c;指导您如何完成这一过程&#xff1a; 1. 创建GitHub账户 如果您还没有GitHub账户&#xff0c;请先在 GitHub 上注册一个。 2. 创建新仓库 登录您的GitHub账户。在GitHub主页的右上角…

HTML简介、基本骨架、标签的关系、注释、路径

1 HTML HTML超文本标记语言 超文本——链接 标记——标记也叫标签&#xff0c;带尖括号<>的文本 标签语法&#xff1a; 标签成对出现&#xff0c;中间包裹内容 <>里面放英文字母(标签名) 结束标签比开始标签多/ 拓展&#xff1a; 双标签&#xff1a;成对出现的标签…