stax-utils.jar 中 IndentingXMLStreamWriter class 的 NoClassDefFoundError

NoClassDefFoundError for IndentingXMLStreamWriter class in stax-utils.jar

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

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' 的方法是从工具的其他 class 中调用的,则它会抛出异常,但是,如果从其他 class 中的 main() 调用此方法,则它会抛出异常工作正常,能够在 jar 中找到 classes。

任何人都可以提出这里有什么问题吗?

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

因此删除您添加到 Java 构建路径的 jar,在插件清单编辑器中打开 MANIFEST.MF 文件,然后将 jar 添加到运行时选项卡。