8

私は OSGI を初めて使用し、以下のようなエラーを解決する方法を見つけようとしています。

org.osgi.framework.BundleException: バンドル org.foo.serviceBundle [253] の未解決の制約: 253.0 を解決できません: 要件 [253.0] パッケージがありません。(&(パッケージ=org.slf4j)(バージョン>=1.6.0)(!(バージョン>=2.0.0)))

Maven アーキタイプを使用してバンドルを生成し、単純な slf4j ロギングを Activator クラスに追加しました。また、次のように Maven バンドル プラグインを使用しています。

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.2.0</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-Activator>org.shoppingsite.Activator</Bundle-Activator>
                </instructions>
            </configuration>
        </plugin>

他の組み合わせを試してみましたが、いずれかのパッケージが解決できません。バンドルを GlassFish appserver にデプロイしようとしています。どんな助けでも大歓迎です

ありがとうございました

4

4 に答える 4

10

これは通常、org.slf4j をエクスポートするバンドルがないことを意味します。ワークフロー全体は次のとおりです。

  • maven-bundle-plugin は、独自のプロジェクトのマニフェストが org.slf4j をインポートすることを確認します (必要なため)。

  • プロジェクトの POM の Maven 依存関係により、slf4j アーティファクトが確実にダウンロードされます。

次に、2 つの問題が発生する可能性があります。

  • コンパイルが失敗し、slf4j アーティファクトが見つからなかった (しかし、気付いていると思います)

  • または、ダウンロードした slf4 アーティファクトにマニフェストがないか、org.slf4j をエクスポートしていません。それを確認するには、org.slf4j バンドルのマニフェストを調べるだけです。Eclipse のような IDE で何かを直接実行している場合は、アーティファクトを見つける代わりに $HOME/.m2/ をチェックインすることをお勧めします。

アーティファクトに適切なマニフェストがない場合は、適切なバンドルを取得できる他のリポジトリを見つけるか、取得しているリポジトリを変更してローカル リポジトリにインストールする (そして、ローカル Maven バンドル リポジトリ (nexus などがある場合)

最後に、アクティベーターとサービス検出を直接定義する代わりに、maven-scr プラグインの使用を検討してください。OSGi を使い始めたときにそれを知っていればよかったのに!

于 2011-12-02T07:11:24.160 に答える
5

使用するすべてのサードパーティ ライブラリのバンドルを作成する手間を省きたい場合は、バンドルにコンパイルできます。試す

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.6</version>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Bundle-Activator>org.shoppingsite.Activator</Bundle-Activator>
            <Embed-Dependency>
                slf4j-api;scope=compile,
                log4j;scope=compile
            </Embed-Dependency>
        </instructions>
    </configuration>
</plugin>
于 2012-02-10T20:38:21.640 に答える
-2

POM の依存関係に <scope>provided</scope> を追加します。http://fusesource.com/docs/ide/7.1/release_notes/release_notes.htmlを読む

于 2013-03-07T15:05:49.530 に答える