14

私たちは、maven と maven-osgi プラグインで構築された大きな (~215 バンドルとカウント) osgi (felix+springdm) プロジェクトを持っています。

Maven の方法にはいくつかの問題があります。

1. サブモジュール pom は、共通の変数と依存関係を利用するために親 pom から継承する必要があります (これで問題ありません)。この種の循環参照は、すべての同期を維持することを非常に困難にします。

2. サブバンドルの個々のバージョン管理が非常に複雑だったため、(プロジェクトに参加する前に) すべてのバンドルに同じバージョンを使用することにしました。これは、リリースごとにすべてのバンドルのバージョンを更新することを意味します。これにより、osgiの概念全体が少し無意味になります。少数のバンドルだけに取り組み続けると言っているわけではないことに注意してください。すべてのバンドルに取り組んでいますが、すべてのリリースには通常、一部のバンドルにのみ影響する 1 つまたは 2 つの機能が含まれています。

3. 最終アーティファクトのパッケージとデプロイを行うには、デプロイに必要なすべてのバンドル (テストとモック用のいくつかを除く) をインポートする別のサブモジュールが必要です。[編集] この集約は、バンドルをコンパイルせず、maven リポジトリから選択するだけなので、メインの pom のものとは異なることに注意してください。

4. Maven 依存関係システムと osgi プラグインのインポートを整合させるのが難しい場合があります。インポートを忘れたり、間違った依存関係を置いたりするのは簡単すぎます。

[編集] すべてのバンドル pom には、次のようなセクションがあります。

         <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Export-Package>
                    </Export-Package>
                    <Import-Package>
                        com.google.gson,
                        org.apache.log4j,
                        org.apache.log4j.spi,
                        org.dom4j,
                        com.myinterfaces
                    </Import-Package>
                </instructions>
            </configuration>
        </plugin>`

これらすべての理由から、問題はありませんが、maven に完全に満足しているわけではありません。最近、誰かが Gradle を万能薬としてではなく、現在の状況に対する明確な改善策として提案しました。

Gradleに移行することをお勧めしますか? そして、どちらが最善の方法でしょうか?

他の誰かが同じ状況を経験しましたか? これは、Osgi を使用するすべての大きなプロジェクトに共通することだと思います。

免責事項:次のような同様の質問を探しました:

Builder、Gradle、または Maven 3 を待ちますか?

OSGi バンドルに適した開発環境を探している

Maven : OSGI、バンドル、およびマルチモジュール プロジェクト

しかし、osgiサブモジュールについてではない場所、またはgradleについてではない場所のいずれかです。

4

1 に答える 1

2
  1. 正しく観察したように、現在、親の pom には 2 つの役割があるため、親と集約の Maven モジュールを分離できます。詳細については、Maven Introduction to POM を参照してください。
  2. 残念ながらAPI Toolsを使わないとバンドルのバージョン管理は楽になりません。API ツールを Maven プラグインとして統合できればすばらしいのですが、この分野での作業は知りません。したがって、一度にすべてのバージョンに触れるか、必要になるたびに更新します。API ツールはここで大いに役立ちますが、Eclipse 内にプラグイン プロジェクトとしてインポートできるバンドルに対してのみ機能します。
  3. では、別のアグリゲーター モジュールがここで役立ちますか? 別のアグリゲーターを集約する複数のアグリゲーターをセットアップできるので、すべてをリストする 1 つの巨大なアグリゲーター モジュールになってしまうことはありませんか? すべてを展開したくない場合があるため、展開から除外するものをセットアップできます。クイックグーグル検索はそれを行う方法を示しまし
  4. @Neil Bartlett は、依存関係を正しく設定していれば、bnd がマニフェストを処理することを既に指摘しています。デフォルトをさらに調整する必要がある場合は、いつでも BND 命令ファイルを設定できます。

可能なツールのリストに Tycho を入れることができます。マニフェストでのみ依存関係を指定する必要があり、API ツールを使用できるようになるため (ただし、まだ統合されていない)、依存関係の管理に役立ちます。ただし、いくつかの頭痛の種をスキップしたい場合は、p2 リポジトリを使用する必要があります (Tycho が Maven アーティファクトに依存するためのサポートを改善するまで)。

于 2011-06-05T08:21:43.847 に答える