【发布时间】:2013-03-13 07:13:31
【问题描述】:
假设我有两个项目,A 和 B。Java 项目,以防万一。
项目 A 包含一堆代表核心类型和元素的 XSD 文件。它们都放在一个叫做“定义”的包中。这内置于project-a.jar。
Project B 代表一个扩展项目,它可以定义自己的类型和元素。我创建了一个新模式并将其放在“definition.extension”包中。这内置于project-b.jar。
现在,对于项目 B 中的 XSD,对于 include,我究竟应该将 schemaLocation 放在什么位置?
schemaLocation="../core-types.xsd" 不太好用(我知道,它需要一个 URI),但正确或标准的方法到底是什么?谷歌发现有更多的人问我这个问题,这些问题的明确标准方法是什么才是真正正确的处理方法。
不可能是我在运行时以编程方式调整了schemaLocation...或者我需要一个构建步骤/脚本来在编译过程中动态替换schemaLocation...对吗?
我不是在寻找诸如“将它们放在共享位置”之类的答案。我正在寻找更多类似于使用相对引用而不是硬编码引用的开发环境的东西。
仅供参考,我正在使用 IntelliJ IDEA,以防有特定于 IDE 的方法。
【问题讨论】:
-
EntityResolver 可能是运行时的技术解决方案。
-
URI 也可以引用嵌入在 jar 中的文件。见this post。
-
也许是 Class.getResource() 或 ClassLoader.getResource()?见this post
-
你试过类似 schemalocation="classpath:core-types.xsd" 吗?