0

私は大規模な 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))"

それは役に立ちませんでした。私は何を間違っていますか?他のポインタはありますか?

4

2 に答える 2

0

簡単な解決策の1つは次のとおりです。

FuseESB コンソールに移動します。

次のコマンドを入力します。

osgi:install mvn:commons-io/commons-io/2.1

「common's-io」を依存関係のグループ ID とアーティファクト ID (Maven) に置き換えます。たとえば、私の依存関係は次のとおりです。

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>

乾杯

于 2013-04-24T11:42:18.787 に答える