如何让Eclipse自动识别同级模块中的Schema文件?
问题描述
我们正在开发一个多模块项目,Schema文件结构如下:
* module1 | +-- schema1.xsd | +... more stuff here * module2 | +-- schema2.xsd | +... more stuff here * module3 | +-- schema3.xsd | +... more stuff here
其中module1是基础模块,它的schema文件会被其他模块引用。用IntelliJ的同事在schema2.xsd和schema3.xsd里是这么引用的:
<xs:import namespace="https://foo.bar/module1/schema1.xsd" />
但把项目导入Eclipse后,所有来自module1的类型引用都会被标红报错,因为Eclipse找不到对应的.xsd文件。只有加上显式的schemaLocation才能通过验证:
<xs:import namespace="https://foo.bar/module1/schema1.xsd" schemaLocation="../module1/schema1.xsd" />
我们纠结点在于:显式路径虽然清晰,但模块位置变动时要手动改路径,而且运行时所有Schema会放在同一资源目录,相对路径会失效。现在想知道能不能配置Eclipse,让它像IntelliJ那样,不用写schemaLocation也能自动在同级模块里找到对应的Schema文件?
解决方案:通过XML Catalog配置实现自动定位
可以用Eclipse自带的XML Catalog功能实现类似IntelliJ的自动映射,具体步骤如下:
- 打开Eclipse偏好设置:
Window > Preferences(Mac系统为Eclipse > Settings) - 展开菜单
XML > XML Catalog - 点击右侧
Add按钮,在弹出窗口中配置:Location选择Workspace,然后定位到module1下的schema1.xsd文件Namespace URI填入xs:import中使用的命名空间:https://foo.bar/module1/schema1.xsdKey type选择Namespace name
- 点击
OK保存配置
完成配置后,Eclipse会将该命名空间与指定的本地Schema文件绑定,无需写schemaLocation也能自动识别验证,后续模块位置变动时,只需在XML Catalog中更新对应文件路径即可,不用修改每个Schema里的引用语句。
内容的提问来源于stack exchange,提问作者mmo
相关产品推荐
相关产品推荐

