【Maven 入门】第三章、Maven POM

news2024/11/15 17:29:59

一、什么是 Maven POM?

POM 是 Maven 中最重要的概念之一,它描述了一个 Maven 项目的基本信息和依赖关系。简单来说,POM 就是一个 XML 文件,其中包含了以下内容:

  • 项目的基本信息,如名称、版本号、描述等。
  • 项目的依赖关系,即该项目所依赖的其他库或框架。
  • 插件配置,用于构建和打包项目时执行一些额外的任务。

二、Maven 核心概念:坐标

1、数学中的坐标

 使用 x、y、z 三个『向量』作为空间的坐标系,可以在『空间』中唯一的定位到一个『点』。

2、Maven中的坐标

2.1、量说明

使用三个『向量』在『Maven的仓库』中唯一的定位到一个『jar』包。

  • groupId:公司或组织的 id
  • artifactId:一个项目或者是项目中的一个模块的 id
  • version:版本号

2.2、三个向量的取值方式

  • groupId:公司或组织域名的倒序,通常也会加上项目名称
    • 例如:com.atguigu.maven
  • artifactId:模块的名称,将来作为 Maven 工程的工程名
  • version:模块的版本号,根据自己的需要设定
    • 例如:SNAPSHOT 表示快照版本,正在迭代过程中,不稳定的版本
    • 例如:RELEASE 表示正式版本

举例:

  • groupId:com.atguigu.maven
  • artifactId:pro01-atguigu-maven
  • version:1.0-SNAPSHOT

3、坐标和仓库中 jar 包的存储路径之间的对应关系

坐标:

<groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>

上面坐标对应的 jar 包在 Maven 本地仓库中的位置:

Maven本地仓库根目录\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar

三、如何创建 Maven 项目?

首先,确保你已经安装了 Maven,并且设置了 MAVEN_HOME 环境变量。接下来,你可以通过 Maven 命令行工具来创建一个新的项目:

mvn archetype:generate -DgroupId=com.company.project  -DartifactId=my-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

 这个命令会创建一个名为 my-project 的新项目,并使用 maven-archetype-quickstart 模板来生成初始的 POM 文件。

 

四、POM 文件结构

在创建一个 Maven 项目时,Maven 会自动生成一个初始的 POM 文件。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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.company.project</groupId>
  <artifactId>my-project</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-project</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

让我们逐一介绍这个文件中的每个部分:

modelVersion

这个元素指定了 POM 文件所使用的模型版本,目前使用的是 4.0.0。

groupId

这个元素指定了项目的组织 ID,通常是公司名称或组织名称。

artifactId

这个元素指定了项目的唯一标识符,通常是项目名称。

version

这个元素指定了项目的版本号,格式为 MAJOR.MINOR.PATCH。

dependencies

这个元素包含了该项目所依赖的其他库或框架。每个依赖都必须包含 groupId、artifactId 和 version 等元素。

build

这个元素包含了构建和打包项目时所需要的配置信息。其中,plugins 元素用于指定需要使用的插件。

五、如何添加依赖关系?

在 Maven 中,我们可以通过在 POM 文件中添加 dependencies 元素来定义项目的依赖关系。

要在 Maven 项目中添加依赖,我们需要做以下几个步骤:

  1. 找到需要添加的依赖的坐标信息,包括 groupId、artifactId 和 version 等。
  2. 在 POM 文件的 dependencies 元素中添加一个 dependency 元素,并填写坐标信息。
  3. 在命令行中运行 mvn install 命令,让 Maven 下载并安装依赖。

例如,如果我们想要在项目中添加 Spring Core 库作为依赖,我们可以在 POM 文件中添加以下内容:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.0</version>
    </dependency>
</dependencies>

 这个例子中,我们添加了 Spring Core 和 Spring Web 两个库作为项目的依赖关系。

六、依赖范围

在 Maven 中,每个依赖都有一个默认的范围,即 compile。这意味着该依赖将被编译到项目中,并在运行时可用。除此之外,还有以下几种范围:

  • provided:表示该依赖只在编译和测试时需要,但在运行时不需要。例如,Servlet API 就是一个 provided 类型的依赖。
  • runtime:表示该依赖在运行时需要,但在编译时不需要。例如,MySQL 驱动就是一个 runtime 类型的依赖。
  • test:表示该依赖只在测试时需要,而在编译和运行时都不需要。例如,JUnit 就是一个 test 类型的依赖。
  • system:表示该依赖类似于 provided 范围,但需要指定本地文件路径。这种依赖通常不推荐使用。

要指定依赖的范围,我们可以在 dependency 元素中添加 scope 元素。例如,如果我们想要将 junit 库作为测试依赖,可以添加以下内容:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

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

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

相关文章

超详细Redis入门教程——Redis 的安装与配置

前言 本文小新为大家带来 超详细Redis入门教程——Redis 的安装与配置 相关知识&#xff0c;具体内容包括Redis 的安装&#xff0c;连接前的配置&#xff0c;Redis 客户端分类&#xff08;包括&#xff1a;命令行客户端&#xff0c;图形界面客户端&#xff0c;Java 代码客户端&…

政策和技术引导企业布局光伏组件回收市场 积极应对光伏组件“退役潮”

一、发展光伏组件回收是实现我国碳中和的战略需求 光伏组件回收主要是通过对其各组件部分进行物理或化学方法处理&#xff0c;进而得到拥有经济价值的材料&#xff0c;进而减少环境污染&#xff0c;实现对废弃光伏组件资源的回收再利用。 我国是光伏组件制造及应用大国&#…

远程仓库的克隆和上传

要创建项目文件夹下打开Git Bush Here --> git clone 远程仓库地址 ! 没有权限访问 原因: 之前登过别人邮箱号,导致克隆失败 解决: 第一步. C盘->用户->电脑用户名->.gitconfig->用vscode打开删除信息,然后保存即可 . 第二步.电脑搜索找到 凭据管理器->wi…

【Python_Scrapy学习笔记(十一)】基于Scrapy框架的下载器中间件添加Cookie参数

基于Scrapy框架的下载器中间件添加Cookie参数 前言 本文中介绍 如何基于 Scrapy 框架的下载器中间件添加 Cookie 参数。 正文 1、添加中间件的流程 在 middlewares.py 中新建 Cookie参数 中间件类在 settings.py 中添加此下载器中间件&#xff0c;设置优先级并开启 2、基…

【C++初阶】命名空间 namespace

一.前言 在正式进入C前&#xff0c;我们需要先了解了解C。顾名思义&#xff0c;C是基于C的一种编程语言&#xff0c;相较于C&#xff0c;C写出来的代码更简洁&#xff0c;有时候C需要几百行代码&#xff0c;而C只需要几十行就可以解决&#xff0c;C也很好的解决了C中存在的一些…

【夜莺监控搭建】

夜莺监控搭建V6版本 v6版本系统架构安装部署安装时序数据库安装mysql、redis和n9e&#xff08;夜莺主程序&#xff09;安装categraf 登录平台如何修改密码添加数据源 官网&#xff1a; https://flashcat.cloud/ GitHub项目地址&#xff1a; https://github.com/ccfos/nightin…

Mongo集群化部署+高可用架构

数据库开发系列 文章目录 数据库开发系列前言一、MongoDB存储引擎二、MongoDB 复制&#xff08;副本集&#xff09;三、为什么需要分片集群架构四、高可用分片集群架构&#xff08;复制集&#xff09;总结 前言 数据库的演进 随着计算机的发展&#xff0c;越来越多的数据需要被…

python+vue 服装穿搭信息管理系统

本系统采用自上往下的方法开发&#xff0c;基本定位如下功能&#xff1a; 本课题要求实现一套服装信息管理系统的设计与实现&#xff0c;系统主要包括管理员模块和用户模块功能模块。 由于本系统需要在不同设备上都能运行&#xff0c;而且电脑配置要求也要越低越好&#xff0c…

SpringMVC框架详解(学习总结)

目录 什么是MVC SpringMVC概述 SpringMVC常见开发方式 SpringMVC执行流程 SpringMVC核心组件介绍 快速构建Spring MVC程序 SpringMVC参数绑定 SpringMVC跳转方式 SpringMVC处理json请求和响应 SpringMVC静态资源处理 SpringMVC操作session和cookie SpringMVC拦截器 …

基于nuxt3的语雀文档批量导出

语雀文档批量导出 快速访问 Github Blog 项目由来 语雀是一个不错的笔记与文档知识库&#xff0c;但是最近发现他开始割韭菜了&#xff0c; 知识库的公开开始收费&#xff0c;就想着把内容都导出自己来部署&#xff0c;发现并没有批量操作&#xff0c;amazing&#xff0c;…

美国运营商PTCRB认证PTCRB认证怎么做PTCRB认证是什么?

大家好&#xff0c;今天我想和大家分享一下什么是PTCRB认证&#xff01; PTCRB是指个人通信服务型号认证评估委员会&#xff0c;由北美移动运营商于1997年成立。目前的运营商已经不仅限于北美&#xff0c;而是涵括全球范围内的移动运营商成员。其目的是为包括Cellular GERAN&a…

Session使用和原理分析图与实现原理-- 代码演示说明 Session 的生命周期和读取的机制代码分析

目录 Web 开发会话技术 -Session —session 技术 session 基本原理 Session 可以做什么 如何理解 Session Session 的基本使用 session 底层实现机制 原理分析图 代码演示 CreateSession.java 测试 Session 创的机制&#xff0c; 注意抓包分析​编辑 ReadSession.j…

C盘文件删除怎么做?3个方法教你清理C盘!

案例&#xff1a;C盘文件怎么删除&#xff1f; 【我的电脑使用了一年多了&#xff0c;现在C盘已经快满了&#xff0c;想知道C盘里的文件哪些可以进行删除&#xff1f;感谢&#xff01;】 C盘是计算机系统盘&#xff0c;存储了操作系统和应用程序等重要文件&#xff0c;因此&a…

机器视觉助力锂电行业升级转型—章鱼博士视控一体化解决方案

摘要&#xff1a; 机器视觉在工业领域中充当了模拟人眼的作用&#xff0c;通过其高效的感知能力、精确的检测准确性、可定制性和较低的人工成本等特点&#xff0c;已逐渐成为工业智能化转型的核心功能。在锂电池领域&#xff0c;机器视觉扮演着许多重要的角色&#xff0c;包括生…

使用Docker部署wikitten个人知识库

使用Docker部署wikitten个人知识库 一、wikitten介绍1.wikitten简介2.wikitten特点 二、本地实践环境介绍三、本地环境检查1.检查Docker服务状态2.检查Docker版本 四、部署wikitten个人知识库1.创建数据目录2.下载wikitten镜像3.创建wikitten容器4.查看wikitten容器状态5.检查w…

【unity实战】随机地下城生成4——小地图的制作(2d,3d通用)(含源码)

原理: 新建一个摄像机,用来查看小地图,我们分个图层只能新建的摄像机才可以拍摄到 如果对摄像机和渲染纹理还不理解的,强烈推荐先看完我的另一篇文章 【Unity游戏开发教程】零基础带你从小白到超神14——灯光、摄像机、天空盒、镜子的制作 新建一个摄像机,记得删除Audio …

关于使用el-input-number设置不让删除为空,让强制为最小值1,以及从1删除,但是发现输入框还是没有最小值的问题

哈喽&#xff0c;大家好啊&#xff0c;最近用到了element的el-input-number 计数器 但是有个问题一直困扰我&#xff0c;就是我发现竟然可以删除输入的值&#xff0c;也不会强制改成最小值 但是因为业务这里不允许数量为空的情况&#xff0c;所以我找了很久&#xff0c;终于实…

JavaSE学习进阶day07_01 Stream流

第二章 Stream流 在Java 8中&#xff0c;得益于Lambda所带来的函数式编程&#xff0c;引入了一个全新的Stream概念&#xff0c;用于解决已有集合类库既有的弊端。 2.1 引言 传统集合的多步遍历代码 几乎所有的集合&#xff08;如Collection接口或Map接口等&#xff09;都支…

SpringBoot学习

什么是springBoot 使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。简而言之&#xff0c;Spring Boot通过提供默认配置的方式整合了所有的框架&#xff0c;让我们可以更加简单、快速、方便地构建应用程序。 并不是对spring的功能增强&#xf…

基于AT89C52单片机的温湿度检测设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87704704 源码获取 主要内容&#xff1a; 设计一套基于51单片机的温湿度Protus仿真监控系统&#xff0c;采用SHT11、DHT11或DS189B20等传感器模块&#xff0c;用LC…