2017-03-15 5 views
1

XmlStreamEventWriterを使用してStAXパーサーでXMLファイルを作成していますが、stax-utils.jarがEclipseのクラスパスに正しく追加されています。例外を発生させたコードの一部があるStax-utils.jarのIndentingXMLStreamWriterクラスのNoClassDefFoundError

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

:私は、このjarファイルからIndentingXMLStreamWriterクラスを使用していたが、何とか例外以下の投げ

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

方法は含むが「IndentingXMLStreamWriter」から呼び出されていますしかし、このメソッドが他のクラスのmain()から呼び出されていれば、そのクラスのクラスを見つけることができます。

誰でもここに間違いを示唆できますか?

+0

ここで実際に何を意味「正しくクラスパスに追加し、」ん? – nitind

+0

@nitind Eclipseでは、プロジェクトを右クリックし、ビルドパスを設定し、そこに「add jar」オプションを使ってstax-utils.jarを追加します。 – user3462473

+0

この例外はEclipseプラグイン内で実行されますか? – nitind

答えて

2

Eclipse/RCPプラグインは、プラグインマニフェスト:MANIFEST.MFファイルに基づいて(ほとんど)ランタイムクラスパスを完全に制御するOSGiランタイム内で実行されます。独自のソースでない依存関係を追加する必要があります。 Java Build Path UIを直接使用しないでください。 Java Build Path UIは、プラグインプロジェクトが依然としてJavaプロジェクトであるためロックアウトされません。

Java Build Pathに追加したjarを削除し、Plug-in Manifest EditorでMANIFEST.MFファイルを開き、RuntimeタブのClasspathセクションにjarファイルを追加します。

The Plug-in Manifest Editor's Runtime page

+0

jarファイルがそのプラグイン自体に追加されたときに動作しますが、ちょっと疑問ですが、プラグインAにプラグインAのプラグインを追加しました。プラグインAはプラグインBの依存関係に追加され、プラグインAのjarからプラグインBへのクラスへのアクセスを試みることはできません。 – user3462473

+0

@ user3462473同じページの[エクスポートされたパッケージ]セクションを使用するために必要なものを追加します。ただし、別のプラグインが同じクラスを必要とする理由を少し考えた後でなければなりません。 – nitind

関連する問題