我正在使用relaxNG和Jing(在Java中使用relaxNG验证器)来验证一些XML文件,我需要合并语法(在两个语法中重复使用元素定义)。
为了实现合并,我在元素中包含了一个语法,并为href属性提供了包含的语法文件的值:
<include href="embededGrammar.xml"/>
所有语法文件都位于我的Java项目资源中的相同路径 在IDE中测试应用程序时,已查找的包含语法和我的XML数据文件已经过验证 但是当我将应用程序打包到JAR文件时,找不到嵌入式语法,并且错误消息报告它尝试在与jar文件相同的位置找到它(而不是在与嵌入语法相同的地方的jar文件中找到它)应该)。
我已经实施了一个解决方法,但我想实施一个干净的解决方案,因此如果有人解决了这个问题,请告诉我如何。
感谢。
编辑:如果我硬编码href值指向jar文件中的文件(jar:file:./ jarfile.jar / path / to / file / ebeddedGrammar.xml)但是jar文件名正常工作可能会更改(附加版本号),而且无法在IDE中进行测试。
答案 0 :(得分:0)
我找到了一个解决方案,它包含注册URLStreamHandler,它允许使用类路径协议引用资源URL,就像我们可以使用Spring框架一样。 结果是我可以像这样引用嵌入式语法文件:
<include href="classpath:path/to/resource/embeddedGrammar.xml"/>
有关如何注册和使用URLStreamHandler的明确说明,请访问:URL to load resources from the classpath in Java