0

リフレクションライブラリなどの依存関係がある通常のmaven jarプロジェクトがあり、それをosgiに変換したいと思っています。

  1. 別の (maven) jar プロジェクトに共通のインターフェイス レイヤーを作成し、依存関係としてバンドルに追加しました。
  2. osgi-module-to-be のタイプを「bundle」に変更しました。
  3. BundleActivator の実装を作成しました
  4. このプラグインを pom に追加しました:

<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.7</version>
<extensions>true</extensions>
<configuration>
    <instructions>
        <Bundle-Activator>my.package.MyServiceActivator</Bundle-Activator>
        <Export-Package>
            my.package.exp.*
        </Export-Package>
        <Import-Package>
            !org.reflections,???
        </Import-Package>
        <Embed-Dependency>
            slf4j-api;scope=compile,???
        </Embed-Dependency>
    </instructions>
</configuration>

ここで迷子になります。"Import-Package" と "Embed-Dependency" を把握する必要があります。さらに重要なのは、それを zip または ORB (または Gogo) として GlassFish にデプロイする方法を把握することです。すべての依存関係の jar と共にデプロイされます。

何か案は?

G.

ところで: org.reflections パッケージは OSGi 対応ではありません

4

1 に答える 1

0

OSGi と Maven Bundle プラグインの仕組みについて混乱しているようです。Felixガイドを読むと役立つかもしれません:

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

基本的に、次のようなものが必要です。

<plugin>   
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <extensions>true</extensions>
  <configuration>
    <instructions>
      <Bundle-Activator>my.package.MyServiceActivator</Bundle-Activator>
      <Export-Package>
        my.package.exp.*
      </Export-Package>
      <Import-Package>
        !org.reflections*,*
      </Import-Package>
      <Embed-Dependency>
         org.reflections
      </Embed-Dependency>
    </instructions>
  </configuration>
</plugin>

デフォルトでは(つまり、省略した場合、通常はそうです)、Import-Package の指示は になります*。これは、java.* または独自のバンドルにないコードで参照するものはすべてインポートする必要があることを意味します。 . ただし、組み込みたいバンドル以外の jar に依存しているため、式を使用してプラグインに伝える必要があります!org.reflections*,*。つまり、org.reflections パッケージをインポートしたくないが、それ以外はすべて問題ありません。また、Embed-Dependency 命令を使用して、呼び出されたすべての artifactId をorg.reflectionsjar に埋め込む必要があることを宣言する必要があります。

ところで、ほぼすべてのOSGi環境がロギング実装を提供する必要があるため、APIはもちろん、ロギングフレームワークSLF4J実装を埋め込みたくない可能性が最も高いです。

バンドル (mvn パッケージまたは単に mvn install) をパッケージ化した後、生成された MANIFEST をチェックして、すべてが正しいように見えることを確認してください (重要なのは、Import-Package パッケージをチェックして、環境にそのようなものを提供するすべてのバンドルがあるかどうかを確認することです)。パッケージ)。

バンドルを正しく設定したら、デプロイは簡単です。フレームワークのバンドル ディレクトリにドロップするだけで、必要な他のすべてのバンドルもそこにあることを確認すれば、すべて正常に動作するはずです。

補足として、 PAX-WRAPまたは単に Karafを使用して、バンドルとして必要な非バンドル JAR をラップすることを検討することをお勧めします(デプロイ フォルダーに JAR を投げるだけで、すぐに OSGi バンドルとしてラップされます)。 、 例えば。

于 2013-02-27T20:45:50.283 に答える