Maven POM 格式、Schema 与 XSD:一篇讲透

1. 一句话理解

可以把它们放在一条线上理解:

Maven POM 格式 :这份 pom.xml 应该长什么样。

Schema / XSD :用来描述和校验"它应该长什么样"的规则文件。

Maven 的 XSD 文件:Maven 官方提供的 POM 规则说明书。

下面用一个很小的例子,把这三者的关系拆开讲清楚。

2. Maven POM 格式是什么

你写的 POM 里可以有:

复制代码
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ruoyi</groupId>
    <artifactId>ruoyi</artifactId>
    <version>3.9.2</version>
</project>

这就是一种固定结构。Maven 看到它,知道:

  • groupId 是项目组织名
  • artifactId 是项目名
  • version 是版本号
  • dependencies 是依赖
  • build 是构建配置
  • modules 是多模块配置

这套 Maven 能识别的 XML 结构,就叫 Maven POM 格式。

POM 全称是:

复制代码
Project Object Model

中文可以理解为:项目对象模型。

它描述一个 Maven 项目,包括:

  • 项目是谁:groupId、artifactId、version
  • 项目依赖谁:dependencies
  • 项目怎么编译:build
  • 项目有哪些模块:modules
  • 项目从哪里下载依赖:repositories

3. Schema 是干什么的

Schema 的意思是:结构规则 / 格式规范。

它规定 XML 里:

  • 可以有哪些标签
  • 哪些标签必须出现
  • 标签能不能重复
  • 标签应该放在哪个位置
  • 标签里面能写什么类型的值
  • 某个属性是否合法

比如 Maven POM 的 Schema 会规定:

复制代码
<project>
    <modelVersion>...</modelVersion>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
</project>

这是合法的。

但如果你写成:

复制代码
<project>
    <abc>hello</abc>
</project>

XML 本身可能没问题,但对 Maven POM 来说,abc 不是 Maven 认识的标准标签,IDE 就可能提示你不合法。

所以 Schema 就像一份"表格填写规则"。

4. XSD 文件是什么

XSD 全称是:

复制代码
XML Schema Definition

意思是:XML 结构定义文件。

它本身也是一个 XML 文件,用来描述另一个 XML 文件应该怎么写。

你的 POM 里这句:

复制代码
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                    http://maven.apache.org/xsd/maven-4.0.0.xsd"

意思是:

复制代码
Maven POM 4.0.0 这个命名空间,
对应的规则文件在:
http://maven.apache.org/xsd/maven-4.0.0.xsd

IDE 可以根据这个 XSD 文件知道:

  • <dependencies> 应该放哪里
  • <dependency> 里可以写 <groupId>、<artifactId>、<version>
  • <modules> 里面应该写 <module>
  • <build> 下面可以有哪些配置

所以 Maven 的 XSD 文件就是:Maven POM 文件的官方格式说明书。

5. 一个生活类比

你要填一张"项目登记表"。

pom.xml 是你填好的表:

复制代码
项目名:ruoyi
版本:3.9.2
依赖:Spring Boot、MyBatis、Druid
模块:admin、system、common

Maven POM 格式 是这张表的固定格式。

Schema 是表格填写规则。

XSD 是把这些规则写成机器能读懂的文件。

schemaLocation 是告诉工具:

"这张表的官方填写规则在这个地址。"

相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang3 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi3 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号3 天前
java函数式编程--入门基础
java·编程·函数式编程