プレーンJavaアプリケーション内で2つのOSGiフレームワークを使用しています。どちらのフレームワークも、共有ディレクトリからバンドルをロードします。
1つのバンドルでは、リソースからファイルをロードします。私はさまざまな方法を試しました
this.getClass().getClassLoader().getResourceAsStream(...)
FrameworkUtil.getBundle(XXX.class).getEntry(...)
FrameworkUtil.getBundle(XXX.class).getResource(...)
ただし、どのコマンドを使用するかは関係ありません。最初はすべて正常に機能します。ただし、両方のフレームワークでいくつかのインストールとアンインストールの手順を実行した後。返されるInputStreamはnullです。
また、OSGiフレームワークを1つだけ使用しても問題なく動作します。
少しデバッグした後、バンドルが
FrameworkUtil.getBundle(XXX.class)
は正しいjarファイルを指していますが、バンドルのBundleDataで参照されているバンドルファイルを探すと、別のバンドルのバンドルファイルを参照しています。バンドルファイルは、OSGiフレームワーク(私の場合はEquinox)の一時ファイルであり、たとえばローカルのMavenリポジトリーにあります。
.m2 \ repository \ org \ eclipse \ osgi \ org.eclipse.osgi \ 3.6.0.v20100517 \ configuration \ org.eclipse.osgi \ bundles \ 29 \ 1
誰かがここで何が間違っている可能性があるか考えていますか?