私は大規模な Java アプリケーションを使用しており、その大部分はネットワーキングとファイル処理であり、多くの DB アクセスを使用しています。UIはありません。いくつかの Web サービス (組み込み Netty) を公開し、いくつかの外部 REST Web サービスを呼び出します。プロジェクトはAntで構築されています。約 10 個の異なる jar と、おそらく 30 ~ 40 個のライブラリです。
私の現在のタスクは、プロジェクトを OSGi フレームワークに移行することです。私はゆっくりと驚いています。
「OSGi In Action」の第 6 章の例に従って、BND ant タスクを使用して、プロジェクト全体を 1 つの巨大な jar ファイルに入れました。これはうまくいきました。java -jar を使用してプログラムを実行できます。これが私の現在の .bnd ファイルです。
-output: bundle/MerchantServicesBundle.jar
-include: manifest/merchantservices.manifest
Bundle-Name: MerchantServices
Bundle-SymbolicName: com.shopping.services.merchant
Bundle-Version: 4.1
Main-Class: com.shopping.merchant.services.netty.MerchantServices
Class-Path: /home/ppantera/repositories/MerchantJava/modules/MerchantServices/conf/
Private-Package: *
Apache Felix 4.0.3 を使用しています。Gogo シェルからバンドルをインストールできますが、起動すると次のようになります。
org.osgi.framework.BundleException: バンドル com.shopping.services.merchant の未解決の制約 [8]: 8.0 を解決できません: 要件がありません [8.0] osgi.wiring.package; (osgi.wiring.package=android.dalvik)
Felix がこれを Android プロジェクトだと思うのはなぜですか?
これについては、ネット上ではあまり話題にならなかったようです。混乱を招く可能性のある新しい OSGi 機能から保護されるように、古いバージョンの Felix を使用することをお勧めしますか?
これを .bnd ファイルに追加してみました:
Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(バージョン>=1.7))"
それは役に立ちませんでした。私は何を間違っていますか?他のポインタはありますか?