Maven完全指南 - 5. 坐标系统

30 阅读3分钟

5. 坐标系统

Maven 的坐标系统是用于唯一标识项目、依赖和插件等构建组件的机制,它由 groupId、artifactId、version 和可选的 classifier 等元素组成,类似于传统数据库中用于唯一标识记录的主键,确保每个组件在 Maven 仓库中具有唯一的标识。

坐标系统格式:groupId:artifactId:version[:classifier]

  • groupId:项目或组织的唯一标识,通常是公司的域名倒写形式,例如 com.example。
  • artifactId:项目或库的标识符,通常是项目名称或模块名称,例如 my-app。
  • version:项目版本,用于标识构件的具体版本,例如 1.0.0 或 1.0-SNAPSHOT。
  • classifier:可选字段,默认为空,用于标识同一构件在不同环境、配置下的变体,如 sources或 javadoc。

问题:packaging为何不是坐标系统中的元素呢?packaging有何作用呢?

packaging 确定了 Maven 构建项目时使用的生命周期和插件配置,例如,jar 使用 maven-jar-plugin 打包,war 使用 maven-war-plugin 打包。因此,packaging 影响的是 Maven 的构建逻辑,而非坐标的唯一性。

一个 Maven 项目仅生成一个特定的 packaging 类型的构件,可以从项目仓库目录下的 pom.xml 文件中读取到项目的 packaging 类型值。因此,知道项目的坐标之后,我们就能获取到项目的打包类型,因此在依赖里配置项目坐标的时候就不需要 packaging 字段。

我们看看项目org.springframework:spring-webmvc:6.1.12的仓库目录:

$ ls -l ~/.m2/repository/org/springframework/spring-webmvc/6.1.12
-rw-rw-r-- 1 yuhong yuhong     262 10月 17 08:45 _remote.repositories
-rw-rw-r-- 1 yuhong yuhong 1046956  8月 14 19:15 spring-webmvc-6.1.12.jar
-rw-rw-r-- 1 yuhong yuhong      40  9月  9 17:41 spring-webmvc-6.1.12.jar.sha1
-rw-rw-r-- 1 yuhong yuhong    2963  8月 14 20:05 spring-webmvc-6.1.12.pom
-rw-rw-r-- 1 yuhong yuhong      40  9月  9 17:41 spring-webmvc-6.1.12.pom.sha1
-rw-rw-r-- 1 yuhong yuhong  832668  8月 14 21:15 spring-webmvc-6.1.12-sources.jar
-rw-rw-r-- 1 yuhong yuhong      40 10月 17 08:45 spring-webmvc-6.1.12-sources.jar.sha1
  • spring-webmvc-6.1.12.pom:这是该构件的 POM 文件,描述该构件的基本信息(如 groupId、artifactId、version、packaging 等)、依赖、插件以及其他构建信息。
  • spring-webmvc-6.1.12.jar:这是该构件的核心二进制文件,也就是 .jar 包,包含了 spring-webmvc 模块的编译后的代码,实际在项目中被引用和运行。
  • spring-webmvc-6.1.12-sources.jar:这是该构件的源码 .jar 包,用于调试或阅读源代码,通常会在开发环境下使用。IDE 可以自动加载源代码文件,以便在调试或查看代码时显示完整的源代码内容。
  • _remote.repositories:记录了此构件及其依赖的来源信息。例如,指定构件是从哪个仓库下载的,帮助 Maven 了解在进行构件更新或下载失败时应该优先尝试的仓库来源。
  • *.sha1:对应文件的 SHA-1 哈希值,用于校验文件的完整性,确保下载的源码文件未损坏或篡改。