8

ANT と従来の BND ツールを使用して構築された OSGi バンドルがあります。私のバンドルは内部でライブラリ (JAR) を使用していますが、これは私の OSGi コンテナ (Apache Felix) 内のバンドルとしては利用できません。そのため、実行時にアクセスできるように、 bundle 内に埋め込もうとしています。

ANT+BND を使用してそのようなライブラリ/JAR を埋め込むにはどうすればよいですか? (注:MAVENを使用することはできません。これを使用すると、はるかに簡単になる可能性があります)

4

2 に答える 2

13

bnd記述子には2つの命令が必要です。最初に使用Include-Resourceして、ターゲットJARをバンドルに含めます。

Include-Resource: foo.jar

次に、foo.jarがバンドルクラスパス上にある必要があることを指定する必要があります。バンドルの内容自体もバンドルクラスパスの一部である必要があると想定しているため、ドットを付けて含める必要があります。

Bundle-ClassPath: ., foo.jar

JARのパッケージをバンドルに丸呑みすることについての@sehの答えPrivate-Packageも正しいことに注意してください(その場合、JARはビルド時のクラスパスに表示される必要があります)。Export-Packageただし、バンドルはエクスポート量を厳密に制御する必要があると思うので、これには使用しません。

于 2011-09-26T12:52:51.150 に答える
0

「bndwrap」と呼ばれるBND提供のAntタスクがあります。それは十分に文書化されていません。私がそれを使おうとしたとき、私はそれが何をしているのかを見るためにJavaコードを読まなければなりませんでした。(ここbnd#doWrap()方法も参照してください。)

依存しているJarファイルを別の方法で「埋め込む」ことも可能であることを思い出します。Jar内のJarとして直接ではなく、Private-PackageBNDディレクティブで次のように宣言するだけで、すべてのクラスをバンドルにまとめることができます。他のJarによって提供されるパッケージはあなたのものに含まれている必要があります。Export-Packageまたは、ディレクティブでこれらのパッケージに言及して、それらを含めエクスポートすることもできます。

于 2011-09-26T11:54:03.223 に答える