DEBUG.WIKI
OnlineSIM:在线接收短信,虚拟号码租用
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →
野草云;香港 200Mbps 峰值;不限月流量 · BGP VPS;查看套餐 →

Maven 4 报 Unknown attribute schemaLocation:恢复正确的 xsi 命名空间

把 xmlns:xsi 中的 http 改成 https 后,Maven 4 可能不再识别 schemaLocation。命名空间 URI 是固定标识,XSD 下载地址可以单独使用 HTTPS。

升级到 Maven 4 后,POM 还没进入依赖解析就报:

XmlReaderException: Unable to read model:
Unknown attribute 'schemaLocation' for tag 'project'

若近期把 xmlns:xsi 的 http 批量改成了 https,应先恢复该声明。Maven 4.0.0-rc-5 的具体问题就是这个条件;旧 Maven 曾容忍,不代表改过的 URI 仍是同一个 XML 命名空间。

命名空间标识和文件地址要分开

标准 XML Schema Instance 命名空间是 http://www.w3.org/2001/XMLSchema-instance。它在这里作为标识符使用,不因写成 HTTP 就表示 Maven 正在用明文网络下载内容。把 scheme 换成 HTTPS,会得到另一个标识符。

标准 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

这是已有 POM 的开头片段,不是完整文件;保留后面的模型版本、坐标和闭合标签。schemaLocation 的两个位置分别是命名空间和对应模式文档地址,XSD 地址使用 HTTPS,并不要求把命名空间也一并替换。

修复生成源,避免下次再次改错

检查父 POM、项目模板、格式化工具和安全扫描的自动替换规则。只手改一份产物,下次生成可能再次出现错误。扫描器也应区分 XML 命名空间标识与实际网络请求地址,不要全局把所有 http: 字符串机械替换。

不要通过删除所有命名空间、关闭 XML 校验或设置 release plugin 的其他参数来绕过。发布插件的 schema 选项不等于 Maven 核心模型读取器的兼容开关,也不会让错误标识自动等价于标准命名空间。

修正后从原 Maven 入口读取同一份 POM,确认越过模型解析;随后执行项目正常校验和构建。若接着出现依赖下载或认证错误,那是后续阶段,应单独定位,不能继续改 xmlns:xsi。

保留模板与 POM 差异。这条修复只恢复标准 XML 标识,不需要为一个 namespace 问题迁移仓库、清空本地缓存或改变依赖版本。