2012-01-16 2 views
1

別のバンドルと依存関係を持つバンドルをエクスポート:は、私はこのOSGIの構成を有している

/configurations 
    config.ini 
    somebundle.properties 
/plugins 
    bundleA 
    bundleB 
osgi-3.4.2-R34x_v2008826-1230.jar 
org.eclipse.equinox.common_3.4.0.v20080421-2006.jar 
org.eclipse.update.configurator_3.2.201.R34x_v20080819.jar 
com.test.arquitectura.osgi.ConfiguratorModule_1.0.0.jar 

私のconfig.iniは、このようなものです:私は

java -Xms256M -Xmx1280M -jar osgi-3.4.2-R34x_v20080826-1230.jar 
を実行すると、私の知る限り、そう

[email protected]:start, \ 
    [email protected]:start, \ 
    [email protected]:start 
osgi.clean = true 
eclipse.ignoreApp=true 
osgi.parentClassLoader=app 

equinox.commonとupdate.configuratorでconfig.iniを読み込むと、/ pluginsフォルダに展開されているすべてのバンドルを "検出"します。その後、ConfiguratorModule(カスタムバンドル)はコンテキスト内のすべてのバンドルを読み込み、それぞれのバンドルのstartメソッド(bundleAとbundleB)を実行します。私はbundleAとbundleBで定義されたいくつかのclasesを使用してEclipseプロジェクト(bundleC)を、持っているので、MANIFEST.MFがある:だから

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: BundleC Plug-in 
Bundle-SymbolicName: com.test.bundlec 
Bundle-Version: 1.0.0 
Bundle-Activator: com.test.bundlec.Activator 
Import-Package: javax.naming,javax.sql,org.osgi.framework;version="1.3 
.0",org.osgi.util.tracker;version="1.3.1" 
Bundle-ClassPath: . 
Require-Bundle: com.test.BundleA;bundle-version="1.0.0", 
com.test.BundleB;bundle-version="1.0.0" 

、私はプラグイン(JAR)bundleCプロジェクト用のファイルを生成したいです。 "Require-bundle"オプションに2つのバンドルがあるので、それらのプロジェクト(BundleAとBundleB)はbundleCクラスパスになければなりませんか?その場合、バンドルを(「プラグイン開発」としてエクスポートして)生成し、新しいバンドルをプラグインフォルダに配置します。私は行方不明のものがありますか?

私が言ったことがすべて正しかった場合は、ここに私の問題があります。私はBundleAとBundleB用のプラグインjarファイルを持っていますが、ソースコードはありませんので、BundleCをjarプラグインにエクスポートするとエラーが発生します。なぜなら、明らかなように、必要なクラスを見つけることができないからですBundleAとBundleBからの使用。クラスパスに必要なバンドルがなくてもプラグインを生成する方法はありますか?

私はそれらを「逆コンパイル」してから、プロジェクトを作成してBundleCのクラスパスに追加しようとしました。私はプラグインを生成することができますし、それをプラグインフォルダに置きますが、osgi環境を実行するとbundleCは見つかりません。私は間違っているの? BundleAとBundleBから何かを使用するためには、あなたの答え

+0

正確なエラー、スタックトレースなどを投稿してください。 – katsharp

答えて

0

ため

おかげで、彼らは(例えば、彼らは他のバンドルでの使用のためのクラスをエクスポートすることができます)、それをエクスポートする必要があります。 BundleCでは、BundleAとBundleBがロードされるまで待機する必要があります(たとえば、BundleListenerの実装では、このシナリオは通常サービスとServiceTrackerで行われます)。

関連する問題