我正在使用 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 中找到类。
有人可以建议这里出了什么问题吗?
最佳答案
Eclipse/RCP 插件在 OSGi 运行时中运行,它(几乎)完全根据插件 list (MANIFEST.MF 文件)控制其运行时类路径。您需要添加任何不是您自己的源的依赖项,而不是直接使用 Java 构建路径 UI。 Java 构建路径 UI 并未被锁定,因为插件项目仍然是 Java 项目,只是包含更多内容。
因此,删除添加到 Java 构建路径中的 jar,在插件 list 编辑器中打开 MANIFEST.MF 文件,然后将 jar 添加到“运行时”选项卡上的“类路径”部分。
关于java - stax-utils.jar 中的 IndentingXMLStreamWriter 类出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42808151/