Maven--pom.xml文件详解

1.pom简介

pom指的是project object model,又叫项目对象模型。Maven的pom文件是一个XML文件,用于描述项目的各种属性、依赖和构建信息,包括项目的名称、版本、许可证、作者、描述、依赖关系、构建过程、插件等。总的来说,POM文件是Maven工程的基本工作单元,它包含了项目的所有必要信息,使得Maven能够自动化地构建和管理项目。

2.常用的pom元素配置
<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><!--                          父项目坐标属性                              --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.1</version><relativePath>/home/mymodule</relativePath> </parent><!--                           当前项目基本属性                           --><groupId>com.njh</groupId><artifactId>Njh-Cloud</artifactId><version>0.0.1-SNAPSHOT</version><name>Njh-Cloud</name><description>Njh-Cloud</description><packaging>pom</packaging><!--                           当前项目下的子模块配置                      --><modules><module>njh-gateway</module></modules><!--                           项目常量属性设置                                 --><properties><java.version>1.8</java.version></properties><!--                           项目依赖管理                                 --><dependencyManagement><dependencies><!-- SpringCloud 微服务 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- SpringBoot 依赖配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><!--                           项目依赖定义                            	    --><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></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><!-- 资源管理 --><resources><resource><directory>src/main/resources</directory><!-- 关闭过滤 --><filtering>false</filtering></resource><resource><directory>src/main/webapp/</directory></resource><resource><directory>src/main/resources</directory><!-- 引入所有 匹配文件进行过滤 --><includes><include>application*</include><include>bootstrap*</include><include>logback*</include></includes><!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 --><filtering>true</filtering></resource></resources></build><!--                           项目环境信息                              	  --><profiles><profile><!-- 本地开发环境 --><id>dev</id><properties><profiles.active>dev</profiles.active></properties><!-- 默认激活dev环境 --><activation> <activeByDefault>true</activeByDefault></activation></profile><profile><!-- 生产环境 --><id>prd</id><properties><profiles.active>prd</profiles.active></properties></profile></profiles><!--                           项目仓库信息                              	  --><repositories><repository><id>public</id><name>nexus</name><url>https://mirrors.njh.cloud.com/repository/maven/</url><releases><enabled>true</enabled></releases></repository></repositories><!--                           项目插件仓库信息                                 --><pluginRepositories><pluginRepository><id>public</id><name>nexus</name><url>https://mirrors.njh.cloud.com/repository/maven/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories></project>
3.父项目坐标属性

在Maven中使用<parent>标签是为了在多模块项目中共同管理依赖,可以让多个模块之间共享依赖关系,从而避免了重复的依赖定义。通过<parent>标签中的<groupId><artifactId><version>元素来指定父项目的坐标,子项目就可以通过该坐标找到父项目并自动继承父项目的pom文件中定义的相关依赖,然后子项目就可以不用重复去声明父项目中已存在的依赖,可以直接使用父项目中的依赖。

<parent><!-- 父项目的群组标识符 --><groupId>org.springframework.boot</groupId>  <!-- 父项目的项目名标识符 --><artifactId>spring-boot-starter-parent</artifactId> <!-- 父项目的版本号标识符 --><version>3.2.1</version> <!-- 用于指示Maven在查找父级POM文件时应该搜索的相对路径 --><relativePath>/home/mymodule</relativePath> 
</parent>
4. 当前项目基本属性

用于设置当前项目的一些基本信息,通过<groupId><artifactId><version>元素来指定当前项目的坐标;<name>用来设置项目名称;<description>用来设置项目的描述信息;<url>用来设置项目的主也url地址;<packaging>用来设置项目的构建类型,如:jar、war、pom等。

<groupId>com.njh</groupId>
<artifactId>Njh-Cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Njh-Cloud</name>
<description>Njh-Cloud</description>
<url>https://gitee.com/Njh-Cloud</url>
<packaging>pom</packaging>
5.当前项目下的子模块配置

在Maven中,<modules>标签用于定义项目的模块。一个Maven项目可以包含多个模块,每个模块可以被视为一个独立的子项目。通过使用<modules>标签,可以将一个大项目拆分成多个小模块,每个模块都有自己的构建过程和依赖关系,从而提高项目的可维护性和可重用性。

<modules><module>njh-gateway</module>
</modules>
6.项目常量属性设置

在Maven中,<properties>标签中用于定义项目的常量属性,这些常量属性可以在整个项目中被共享和重用,从而简化了项目的配置和管理。每个属性都包含一个id和一个值,在使用时通过${id}就能获取到设置的属性值。

<properties><java.version>1.8</java.version>
</properties><!-- 使用上面的属性 -->
<version>${java.version}</version>
7.项目依赖管理

在Maven中,<dependencyManagement>标签用于管理项目中的依赖关系,确保所有子模块共享相同的依赖版本。通过在<dependencyManagement>标签中添加需要共用的依赖,在该项目下的所有子模块会自动引入相同的依赖,可以避免在每个子模块中重复定义相同的依赖,提高了项目构建的效率和一致性。

<dependencyManagement><dependencies><dependency><groupId>groupId</groupId><artifactId>artifactId</artifactId><version>version</version></dependency></dependencies>
</dependencyManagement>
8.项目依赖定义

在Maven中,<dependencies>标签用于定义项目的依赖关系,可以将项目所需的依赖库添加到项目中,并确保这些依赖被正确地管理和使用。每个依赖都是使用<dependency>标签定义的,<dependency>标签中常用的属性有:

  • <groupId>:依赖库的唯一标识符,通常是组织或项目的唯一标识符。
  • <artifactId>:依赖库的唯一标识符,通常是项目或库的唯一标识符。
  • <version>:依赖库的版本号。
  • <scope>:依赖项的作用范围 ,包括compile、provided、runtime、test、system、optional。
  • <optional>:标注依赖是否传递。默认值为 false,表示可以将该依赖向下传递给其他依赖了该项目的项目。设置成true,则不会向下传递。
  • <exclusions>:排除项目中引入的依赖中所包含的某些间接依赖。
<dependencies><dependency><groupId>groupId</groupId><artifactId>artifactId</artifactId><version>version</version><scope>compile</scope><optional>true</optional><exclusions><exclusion> <groupId>groupid</groupId><artifactId>artifactid</artifactId></exclusion></exclusions></dependency>
</dependencies>

scope 依赖项常用的适用范围如下:

  • compile:缺省值,表示所有阶段(编译、测试、运行)可用,该依赖包需要全程存在会随着项目一起发布。
  • provided:表示只在提供依赖的环境中是可用的,也就是在编译、测试时需要,运行时不需要,该依赖不会被打包到项目中;
  • runtime:表示只在运行时可用,该依赖会打包到项目中;
  • test:表示只在测试期间是可用的,该依赖不会被打包到项目中;
  • system:表示只能在系统类路径中找到,不会在Repository中查找它;
9.项目构建信息

在Maven中,<build>标签用于配置项目的构建过程。它包含了一系列的子标签,用于定义项目的构建策略和任务。常用的字标签有:

  1. <plugins>:用于定义Maven插件的列表。Maven插件可以用来执行各种任务,例如编译代码、运行测试、打包和发布项目等。
  2. <pluginManagement>:用于定义项目的构建插件的列表,以及这些插件的配置。
  3. <resources>:用于定义资源的配置,例如在构建过程中要处理的属性文件或资源文件。
  4. <testResources>:类似于<resources>,但是用于配置测试资源,例如在测试过程中要处理的属性文件或资源文件。
  5. <sourceDirectory>:用于指定项目的源代码目录。
  6. <outputDirectory>:用于指定项目的输出目录,例如生成的JAR文件或WAR文件。
  7. <filters>:用于定义项目的过滤器,例如在构建过程中要应用的属性文件过滤器。
  8. <finalName>:用于指定项目的最终名称,例如生成的JAR文件的名称。
<build><plugins></plugins><resources></resources><testResources></testResources><sourceDirectory></sourceDirectory><outputDirectory></outputDirectory><filters></filters><finalName></finalName><pluginManagement></pluginManagement>
</build>
10.项目环境信息

在Maven中,<profiles>标签用于定义项目的构建环境的配置,它允许你为不同的构建环境或目标提供不同的配置。通过不同的<profile>标签来定义不同的环境配置,在<profile>标签里面包含以下部分:

  • <id>:配置文件的唯一标识符。
  • <activation>:用于激活配置文件的逻辑。例如,使用<activeByDefault>属性来指定默认激活的配置文件。
  • <properties>: 用于存储配置文件中使用的属性。
  • <build>: 用于定义配置文件中的构建任务和插件。
<profiles><profile><!-- 本地开发环境 --><id>dev</id><properties><profiles.active>dev</profiles.active></properties><!-- 默认激活dev环境 --><activation> <activeByDefault>true</activeByDefault></activation></profile><profile><!-- 生产环境 --><id>prd</id><properties><profiles.active>prd</profiles.active></properties></profile>
</profiles>
11.项目仓库信息

在Maven中,<repositories>标签用于配置项目所需的依赖库的位置,使得项目能够方便地获取和管理依赖。通过配置不同的仓库,可以轻松地在不同的环境中使用不同的依赖库,从而增加了项目的灵活性和可移植性。其中<repository>标签包含以下部分:

  • <id>:仓库的唯一标识符。
  • <url>:仓库的URL地址。
  • <releases>:用于配置仓库中发布的版本。如果<releases>标签被包含,那么Maven会在这个仓库中搜索并下载项目所需的依赖库。
  • <snapshots>:用于配置仓库中快照版本的位置。如果<snapshots>标签被包含,那么Maven会在这个仓库中搜索并下载项目所需的快照版本。
<repositories><repository><id>snapshots</id><url>http://repo.maven.apache.org/maven-snapshots/</url><releases><enabled>true</enabled></releases></repository><repository><id>releases</id><url>http://repo.maven.apache.org/maven-releases/</url><releases><enabled>true</enabled></releases></repository>
</repositories>
12.项目插件仓库信息

在Maven中,<pluginRepositories>标签用于配置项目所需的插件库的位置,与<repositories>标签功能基本相同,主要的区别是为了获取和管理Maven插件和插件依赖的。

<pluginRepositories><pluginRepository><id>central</id><url>http://repo.maven.apache.org/maven2</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository>
</pluginRepositories>

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

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

相关文章

计算机网络——数据链路层(1)

一、概述 在计算机网络中&#xff0c;数据链路层承担着点对点通信的任务&#xff0c;用于跨物理层在网段节点之间参数数据。它在网络分层中处于物理层之上&#xff0c;网路层之下。 在链路层的讨论中&#xff0c;我们将看到两种截然不同类型的链路层信道。第一种类型是广播信道…

The Blocks Problem

本题是一道模拟题&#xff0c;但个人感觉挺有意思的&#xff08;思路很明确&#xff0c;但是WA了好几发才过&#xff09;&#xff0c;因此来讲一讲思路。 题面 题面PDF 样例输入 10 move 9 onto 1 move 8 over 1 move 7 over 1 move 6 over 1 pile 8 over 6 pile 8 over 5…

设计模式——1_5 享元(Flyweight)

今人不见古时月&#xff0c;今月曾经照古人 ——李白 文章目录 定义图纸一个例子&#xff1a;可以复用的样式表绘制表格降本增效&#xff1f;第一步&#xff0c;先分析 变化和不变的地方第二步&#xff0c;把变化和不变的地方拆开来第三步&#xff1a;有没有办法共享这些内容完…

Three.js 学习笔记之模型(学习中1.18更新)

文章目录 模型 几何体 材质模型点模型Points - 用于显示点线模型Line | LineLoop | LineSegments网格模型mesh - 三角形 几何体BufferGeometry缓冲类型几何体BufferGeometry - 基类创建几何体的方式BufferAttribute Types定义顶点法线 geometry.attributes.normal BufferGeom…

您的孩子上课总是开小差?注意力不集中?来看看这个专注力提升利器!

我们会发现&#xff0c;有些时候孩子在上课以及写作业&#xff0c;虽然手里握着笔&#xff0c;但是思绪已经“飘到外太空去了”&#xff0c;无法集中注意力&#xff1b;考试的过程中&#xff0c;更是马虎大意&#xff0c;不经过思考就直接作答&#xff0c;或者重复犯简单的错误…

debian 12 安装 浏览器 Epiphany

Epiphany 什么epiphany-browser epiphany-browser 是&#xff1a; Epiphany 是一款简单而强大的 GNOME 网络浏览器&#xff0c;针对 非技术用户。它的原则是简单和标准 合规。 简单性是通过精心设计的用户界面和依赖来实现的 在用于执行外部任务&#xff08;如阅读 电子邮件…

创建一个自定义的VSCode插件项目

创建一个自定义的VSCode插件项目需要以下步骤&#xff1a; 安装Node.js和npm&#xff1a;VSCode插件是用TypeScript或JavaScript编写的&#xff0c;所以你需要安装Node.js和npm。你可以在Node.js官方网站下载并安装。 安装Yeoman和VS Code Extension Generator&#xff1a;Ye…

opengauss-高斯数据库的安装部署及MySQL数据迁移实战.

目录 介绍 下载安装包 安装 1.设置SEMMNI 2.新建用户和用户组 3.下载安装包解压 4.安装数据库 5.修改配置 6.重启服务 数据库使用 gsql命令和常用sql 1.使用omm用户连接数据库-本地登陆无需输入密码&#xff1a; 2.查看用户信息 3.删除数据库 4.创建用户 5.创建…

【银行测试】银行项目,信贷/贷款业务测试+常问面试(二)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 银行测试-信贷&am…

RabbitMQ常见问题之延迟消息

文章目录 一、死信交换机二、TTL1. Queue指定死信交换机并设置TTL2. 消息设置TTL 三、延迟队列1. SpringAMQP创建延迟队列2. 设置消息延迟3. 测试 一、死信交换机 当一个队列中的消息满足下列情况之一时&#xff0c;可以成为死信&#xff08;dead letter&#xff09;&#xff…

行列转化【附加面试题】

在MySQL中&#xff0c;行列转换是一种常见的操作。它包括行转列和列转行两种情况。 行转列&#xff1a;行转列是将表中的某些行转换成列&#xff0c;以提供更为清晰、易读的数据视图。例如&#xff0c;假设我们有一个包含科目和分数的表&#xff0c;我们可以使用SUM和CASE语句…

python使用Apache+mod_wsgi部署Flask

python使用Apachemod_wsgi部署Flask 一、安装python环境&#xff08;V3.10.10&#xff09;二、安装mod_wsgi三、安装Apache1、下载2、解压3、配置 四、安装项目依赖五、启动六、基于多端口部署多个flask项目 一、安装python环境&#xff08;V3.10.10&#xff09; 安装时勾选&q…

Spring重要知识点

一、Spring中相关概念 1.IOC 控制反转 IoC&#xff08;Inverse of Control:控制反转&#xff09;是⼀种设计思想&#xff0c;就是将原本在程序中⼿动创建对象的控制权&#xff0c;交由Spring框架来管理。IoC 在其他语⾔中也有应⽤&#xff0c;并⾮ Spring 所独有。 IoC 容器…

06-数据容器(字典)基础知识0基础来学

为什么需要字典 可以提供通过某个东西找到某个东西 """ 演示数据容器字典的定义 ​ """ #定义字典 my_dict1{"王力宏":99,"周结论":88,"林俊杰":77} #定义空字典 my_dict2{} my_dict3dict() print(f"字典1的…

软件设计师6--流水线技术

软件设计师6--流水线技术 考点1&#xff1a;流水线--概念考点2&#xff1a;流水线--流水线计算考点3&#xff1a;流水线--流水线吞吐率计算例题&#xff1a; 考点1&#xff1a;流水线–概念 相关参数计算&#xff1a; 流水线执行时间计算、流水线吞吐率、流水线加速比、流水线…

Verilog刷题笔记15

题目&#xff1a; An adder-subtractor can be built from an adder by optionally negating one of the inputs, which is equivalent to inverting the input then adding 1. The net result is a circuit that can do two operations: (a b 0) and (a ~b 1). See Wikipe…

力扣刷MySQL-第四弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

JavaScripts笔记I(基础)

JavaScripts基础 js是一门编程语言&#xff0c;可以实现很多的网页交互效果。 JavaScript脚本语言具有以下特点: &#xff08;1&#xff09;脚本语言。JavaScript是一种解释型的脚本语言&#xff0c;C、C等语言先编译后执行&#xff0c;而JavaScript是在程序的运行过程中逐行…

macOS - md5 | md5sum

文章目录 简单使用介绍文档Linux - md5summacOS - md5 大文件传输是否完整&#xff0c;你可以使用 md5 进行校验 linux 上使用 md5sum 命令&#xff0c;在macOS 上 md5 命令是和 md5sum 等效的 简单使用介绍 参考&#xff1a;https://blog.csdn.net/cnds123321/article/detail…

[go语言]数据类型

目录 知识结构 整型、浮点型 1.整型 2.浮点型 复数、布尔类型 1.复数 2.布尔类型 字符与字符串 1.字符串的格式化 2.字符串的截取 3.格式化好的字符串赋值给量 4.字符串的转换 5.strings包 知识结构 整型、浮点型 1.整型 在Go语言中&#xff0c;整型数据是一种基…