stax-utils.jar中IndentingXMLStreamWriter类的NoClassDefFoundError

时间:2017-03-15 11:14:00

标签: java xml eclipse eclipse-rcp stax

我正在使用XmlStreamEventWriter编写带有StAX解析器的XML文件,stax-utils.jar被正确添加到Eclipse中的类路径中。我想从这个jar文件中使用IndentingXMLStreamWriter类,但不知何故它抛出异常:

java.lang.NoClassDefFoundError: javanet/staxutils/IndentingXMLStreamWriter
Caused by: java.lang.ClassNotFoundException: javanet.staxutils.IndentingXMLStreamWriter 
           cannot be found by RCP_PLUGIN_6.20.0.qualifier

导致异常的代码是:

XMLEventFactory eventFactory=XMLEventFactory.newInstance();
if(!tmpSettingsXml.exists())
    tmpSettingsXml.createNewFile();
XMLStreamWriter xmlStreamWriter=new IndentingXMLStreamWriter(XMLOutputFactory.newInstance().
                    createXMLStreamWriter(new FileOutputStream(tmpSettingsXml)));
xmlStreamWriter.writeStartDocument();

如果方法包含' IndentingXMLStreamWriter'正在从其他类的工具调用它抛出异常,但是,如果从其他类的main()调用此方法,它完美地工作正常并且能够在jar中找到类。

任何人都可以在这里提出错误的建议吗?

1 个答案:

答案 0 :(得分:2)

Eclipse / RCP插件在OSGi运行时内运行,它基于插件清单(几乎)完全控制其运行时类路径: MANIFEST.MF 文件。您需要添加任何不属于您自己的 源的依赖项,而不是直接使用Java Build Path UI。 Java Build Path UI没有被锁定,因为插件项目仍然是一个Java项目,只是有更多东西。

因此,删除您添加到Java Build Path的jar,在Plug-in Manifest Editor中打开MANIFEST.MF文件,并将jar添加到Runtime选项卡上的Classpath部分。

The Plug-in Manifest Editor's Runtime page