【Java基础】Maven的坐标和依赖

1. 前言

说到坐标,您最熟悉的定义应该是来自平面几何,即在一个平面坐标系中,坐标(x,y)表示距离 x 轴为 y,距离 y 轴距离为 x 的点,任何一个坐标都能够唯一标识该平面上的一个点。

在现实的生活中同样存在着很多坐标,例如地址,我们可以通过国家、省、市、县、乡镇、村、门牌号等一些列信息唯一地标识一个地址。

在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称为构件。在 Maven 世界中存在着数十万甚至数百万构件,在引入坐标概念之前,当用户需要使用某个构件时,只能去对应的网站寻找,但各个网站的风格迥异,这使得用户将大量的时间浪费在搜索和寻找上,严重地影响了研发效率。为了解决这个问题,于是 Maven 引入了 Maven 坐标的概念。

2. Maven 坐标

Maven 坐标一套规则,它规定:世界上任何一个构件都可以使用 Maven 坐标并作为其唯一标识,Maven 坐标包括 groupId、artifactId、version、packaging 等元素,只要用户提供了正确的坐标元素,Maven 就能找到对应的构件。

任何一个构件都必须明确定义自己的坐标,这是 Maven 的强制要求,任何构件都不能例外。我们在开发 Maven 项目时,也需要为其定义合适的坐标,只有定义了坐标,其他项目才能引用该项目生成的构件。

以下是 helloMaven 项目的坐标定义。

xml 复制代码
<project> 
    <groupId>net.biancheng.www</groupId>
    <artifactId>helloMaven</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
</project>

Maven 坐标主要由以下元素组成:

  • groupId: 项目组 ID,定义当前 Maven 项目隶属的组织或公司,通常是唯一的。它的取值一般是项目所属公司或组织的网址或 URL 的反写,例如 net.biancheng.www。
  • artifactId: 项目 ID,通常是项目的名称。
  • version:版本。
  • packaging:项目的打包方式,默认值为 jar。

以上 4 个元素中 groupId、artifactId 和 version 是必须定义的,packaging 是可选的。

3. 依赖声明

Maven 坐标是依赖的前提,所有 Maven 项目必须明确定义自己的坐标,只有这样,它们才可能成为其他项目的依赖。当一个项目的构件成为其他项目的依赖时,该项目的坐标才能体现出它的价值。

当 Maven 项目需要声明某一个依赖时,通常只需要在其 POM 中配置该依赖的坐标信息,Maven 会根据坐标自动将依赖下载到项目中。

例如,某个项目中使用 servlet-api 作为其依赖,其配置如下。

xml 复制代码
<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">
...
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

dependencies 元素可以包含一个或者多个 dependency 子元素,用以声明一个或者多个项目依赖,每个依赖都可以包含以下元素:

  • groupId、artifactId 和 version:依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven 根据坐标才能找到需要的依赖。
  • type:依赖的类型,对应于项目坐标定义的 packaging。大部分情况下,该元素不必声明,其默认值是 jar。
  • scope:依赖的范围。
  • optional:标记依赖是否可选。
  • exclusions:用来排除传递性依赖。
    大部分依赖声明只包含 groupId、artifactId 和 version 三个元素,至于 scope、optional 以及 exclusions 等元素,了解即可,在后续的学习中我们会陆续进行讲解。

4. 获取依赖坐标

通常情况下,绝大部分依赖的 Maven 坐标都能在 https://mvnrepository.com/ 中获取。

相关推荐
eralong5 分钟前
Java IO 与 NIO
java·后端
Jesse_EC19 分钟前
我给消息推送加了 Publisher Confirm,然后亲手引入了一个竞态
java
名字还没想好☜19 分钟前
Go 1.23 range-over-func 迭代器实战:自定义可迭代类型、提前退出与惰性求值
开发语言·后端·golang·go·迭代器
S3rein19 分钟前
JAVA多线程手撕
java·多线程
用户81818706274622 分钟前
第7章 死锁排查实录:jstack定位死锁的完整流程
java·后端
喵同志不止步于码农40 分钟前
Java Caffeine 快速入门
java·开发语言·后端·并发·缓存一致性
Java成神之路-41 分钟前
Java 并发灵魂拷问:notify/signal 唤醒顺序是规范还是实现?
java
Java牛马1 小时前
Caffeine 缓存及其应用相关总结
java·redis·缓存·caffeine·数据一致性·本地缓存
2kπ1 小时前
QT开发笔记
开发语言·笔记·qt
青 春 记 忆1 小时前
零基础入门Python15|关联、聚合、索引与事务:订单数据库
开发语言·python·后端开发