
Maven 无法解析 org.apache.xerces:org.apache.xerces:2.12.2 是因坐标错误——该 artifact 并不存在于 Maven 中央仓库;正确依赖应为 xerces:xercesImpl(API 层则用 xml-apis:xml-apis),且需注意 JDK 版本适配与命名空间迁移。
maven 无法解析 `org.apache.xerces:org.apache.xerces:2.12.2` 是因坐标错误——该 artifact 并不存在于 maven 中央仓库;正确依赖应为 `xerces:xercesimpl`(api 层则用 `xml-apis:xml-apis`),且需注意 jdk 版本适配与命名空间迁移。
Xerces 是 Java 生态中历史悠久的 XML 解析器实现,但其 Maven 发布历史混乱、坐标不统一,是开发者高频踩坑点。你当前 pom.xml 中声明的:
<dependency><groupid>org.apache.xerces</groupid><artifactid>org.apache.xerces</artifactid><version>2.12.2</version></dependency>
完全无效——Maven 中央仓库(https://repo.maven.apache.org/maven2)中根本不存在 org.apache.xerces:org.apache.xerces 这一 artifact。该坐标既非官方发布格式,也未被 Apache 官方维护。你看到的 2.12.2 版本仅零星出现在第三方小众仓库(如 Clazzes),不具备可靠性和可持续性。
✅ 正确的、被广泛支持的 Xerces 核心依赖坐标如下:
| 用途 | groupId | artifactId | 推荐版本(截至 2026) | 说明 |
|---|---|---|---|---|
| XML 解析器实现 | xerces |
xercesImpl |
2.12.2 |
提供 org.apache.xerces.parsers.DOMParser 等核心类 |
| XML 标准 API 接口 | xml-apis |
xml-apis |
2.0.2 或 1.4.01
|
定义 org.w3c.dom.*、org.xml.sax.* 等接口(JDK 已内置部分) |
⚠️ 注意:自 JDK 9 起,
xml-apis的多数接口已由java.xml模块提供;JDK 17+ 更彻底移除了对javax.xml.*的默认绑定,必须显式引入xercesImpl才能保障 DOM/SAX 解析功能完整可用。
✅ 修复后的最小可行 pom.xml 片段
<dependencies><!-- JUnit 测试(保持不变) --><dependency><groupid>junit</groupid><artifactid>junit</artifactid><version>4.13.2</version><scope>test</scope></dependency><!-- ✅ 正确的 Xerces 实现依赖 --><dependency><groupid>xerces</groupid><artifactid>xercesImpl</artifactid><version>2.12.2</version></dependency><!-- ✅ 可选:显式声明 XML API(增强兼容性,尤其在老 JDK 或容器环境中) --><dependency><groupid>xml-apis</groupid><artifactid>xml-apis</artifactid><version>2.0.2</version></dependency></dependencies>
? 验证与注意事项
-
无需额外配置仓库:
xerces:xercesImpl和xml-apis:xml-apis均已同步至 Maven 中央仓库,开箱即用。 -
避免冲突:若项目中其他依赖(如旧版 Spring、Struts、WebLogic 客户端)间接引入了不同版本的
xercesImpl,请使用<exclusions></exclusions>显式排除,再统一声明所需版本:<dependency><groupid>some.group</groupid><artifactid>legacy-lib</artifactid><version>1.0</version><exclusions><exclusion><groupid>xerces</groupid><artifactid>xercesImpl</artifactid></exclusion></exclusions></dependency>
-
JDK 17+ 专项提醒:
若你使用 JDK 17 或更高版本,且代码中调用DocumentBuilder.parse(new InputSource(...))仍报ClassNotFoundException或SAXException,请确认:- 未误用
javax.xml.*包(JDK 17+ 已迁移到jakarta.xml.*,但 Xerces 本身仍属org.apache.xerces,与 Jakarta 迁移无关); - 未因 Servlet 容器(如 Tomcat 10+)自带 Jakarta EE 实现而引发类加载冲突——此时应将
xercesImpl设为<scope>provided</scope>,交由容器提供。
- 未误用
? 总结
Xerces 不是“不能用”,而是“不能乱用”。其 Maven 坐标长期存在 xerces:xercesImpl(主流)、org.apache.xerces:xercesImpl(极少维护)、org.apache.xerces:org.apache.xerces(完全错误)等多套并行体系。坚持使用 xerces:xercesImpl + xml-apis:xml-apis 这一经过数十年验证的组合,配合 mvn dependency:tree -Dverbose 审查传递依赖,即可彻底规避“Could not resolve dependencies for org.apache.xerces”类错误。真正的稳定,始于坐标的精准。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











