2012-04-26 15 views
2

したがって、私はEclipseで見ることができる拡張機能(http://docs.oracle.com/javase/tutorial/ext/basics/index.html参照)があります。OSGI経由で実行すると、インストールされた拡張機能からクラスをインスタンス化できません。

私は、この拡張モジュールでクラスのインスタンスを作成しようとする単純なrcpアプリケーションを作成しました。しかし、すべてが正常にコンパイルされますが、インスタンスを作成するときにNoClassDefFoundErrorが発生します。

インスタンスの細かい部分を作成する単純なJavaアプリケーションを実行できるので、これはOSGiと関係があると仮定しています。

本当にありがとうございます。あなたの拡張機能のクラスは、JREで提供されていたよう

おかげ

+0

マニフェストのインポートリストにクラスパッケージが読み込まれていますか? – Michael

+0

いいえ、そこにはありません。インストールされた拡張機能のため、標準のjreの一部と見なされているので、暗黙のインポートがあるという印象を受けました。 – Jamesy82

+0

@earcamが説明した通り、残念ながら明示的にする必要があります。あるいは、自動インポートを有効にすることができるプラグインがあります(これは、基本的にすべての参照で最終的な成果物をパックします)。しかし、それらはあなたのものをはるかに肥満にする傾向があるので、彼らはthoになる必要があります。完全にあなたまで。いずれにしても、参照が明示的に宣言されていることを確認する必要があります。 – Michael

答えて

3

私は

osgi.parentClassloader=ext 

わからない、まだ私は今取得しないよりも、このような変更の意味合い他の引数を使用して「EXT」クラスローダの親クラスローダを設定することで、別の解決策を見つけましたエラー。

+1

+1興味深い、これについて知りませんでした - あなたは自分の答えを受け入れるべきです。 – earcam

2

は、彼らがOSGiフレームワークのシステム・バンドルによってエクスポートする必要があります。

これは、パッケージをorg.osgi.framework.system.packages.extraプロパティに追加することで実現できます(これはシステムプロパティとして設定でき、フレームワークに渡されます)。

これが完了し、消費バンドルにMANIFEST.MFのImport-Packageエントリにリストされているパッケージがあれば、そのクラスにアクセスできるはずです。

JREの拡張は、OSGiのほぼ正反対です。私はあなたがこれをやっている理由を知りたいのですか?

+0

その理由は、sunのjreから離れてしまいました。残念ながら、sun.org.mozilla.javascript.internalに依存しているコードがあります。これはrt.jarの中にあったものの、extディレクトリに移動していますこの新しいジュールの 解決に感謝します。 Iveは必要なバンドルとしてsystem.bundleを追加し、インポートされたパッケージとしてsun.org.mozilla.javascript.internalを追加しましたが、eclipseはバンドルがパッケージをエクスポートしないことを教えています。 私は起動設定でプロパティを設定しましたが、私はそのプロパティを別の場所に設定して、コンパイル時にもそれを取得する必要があると仮定しています。 – Jamesy82

関連する問題