OSGi ビルドの依存関係を管理するにはどうすればよいですか?
-
09-06-2019 - |
質問
プラグイン開発を容易にするために、OSGi ランタイム (Equinox) をカスタム クライアント/サーバー アプリケーションに組み込みましたが、これまでのところ順調に進んでいます。私たちは、組み込みのマニフェスト エディター、依存関係管理、エクスポート ウィザードを備えた Eclipse を使用してプラグインを構築してきました。Eclipse を使用してビルドを管理することは、Hudson を介した継続的統合にはあまり役に立ちません。
他の OSGi バンドルに依存する OSGi バンドルがあります。カスタム ANT ビルドでビルド順序をハードコーディングするのは本当に嫌です。私たちがやったことは過去のことであり、かなりひどいことです。OSGi の依存関係を自動的に解決できない場合でも、簡単に管理できるビルド ツールはありますか?これを行うための適切な例はありますか?
説明:
生成されたビルド スクリプトは、Eclipse 経由でのみ使用できます。Eclipse の一部を手動で実行する必要があります。また、Eclipse ビルドには含まれない標準ターゲットもいくつかあります。再生成される可能性があるため、生成されたファイルを変更したくありません (インクルードはできることはわかっていますが、Eclipse 生成ファイルをすべて変更することは避けたいです)一緒に)
私のプロジェクトのレイアウトは次のとおりです。
/
-PluginA
-PluginB
-PluginC
.
.
.
Eclipse PDE を使用する場合、各プラグインにはマニフェストがありますが、PDE が自動的にマニフェストを行うため、build.xml はありません。Hudson を使用して GUI 主導のプロセスを自動化するのは困難です。独自の build.xml をセットアップしてそれぞれをビルドしたいのですが、依存関係とビルド順序の問題があります。これらの問題は、マニフェスト ファイル (OSGi インポートを記述する) によって引き起こされます。たとえば、PluginC は PluginB に依存し、PluginB は PluginA に依存します。これらは正しい順序で構築する必要があります。ビルド順序を手動で制御できることを認識しました。ビルド順序の依存関係管理を自動化するのに役立つツールを探しています。
解決 4
いくつかの古い質問を終了します...
私たちの設定では、ネットワーク接続とタイミングが不足していたため、Maven には役に立ちませんでした。オフラインの Maven セットアップがあることは知っていますが、時間を考えるとあまりにも大変でした。ビルド プロセスを再編成する時間ができたら、適切なセットアップを使用できるようになることを願っています。
このソリューションには、Ant、BND、およびいくつかのカスタム Ant タスクが含まれていました。さまざまなバンドルの依存関係は手動で管理されます。私たちはすでに Ant を使用していました。BND とカスタム タスクがすべてを結び付けました。カスタム タスクは、bnd/eclipse プロジェクトが同期していることを確認するだけです。
他のヒント
ずっとMaven2。というEclipseプラグインがあります m2eclipse 管理を支援するために、依存関係の問題を正確に解決し、さらにいくつかの問題を解決します。があります ドキュメントとしての無料オンラインブック.
具体的に見てみると マルチモジュールプロジェクト 多くのコンポーネントをバンドルし、Maven にビルド順序と依存関係を解決させるためです。
もあります。 Eclipse 統合に関する章.
これは単なる Eclipse と Maven です。次に、OSGi 用の優れた機能をいくつか紹介します。
- の Apache Felix BND Maven プラグイン マニフェストを自動生成するか、少なくとも役立ちます
- の PAX OPS4J プロジェクト その Maven プラグインは、プロジェクトのブートストラップやランチャーの提供などに非常に役立ちます。
そして基本的に、Maven モジュール モデルは OSGi のバンドル モデルに完全に適合します。私たちは 3 年以上、Maven を使用して数百のバンドルを含む複数の製品を構築および管理してきましたが、それは素晴らしいことです。
Maven2 に出向中。構築するには Tycho プラグインを調べてください。これらは Eclipse の JDT コンパイラを使用するため、Eclipse が実行時に行うのと同じ方法で、コンパイル時にすべての OSGi ルールを実装します。
あるいは、Apache Felix BND プラグインも人気があるようです。私が Tycho を好むのは、Maven と Eclipse の開発環境をより緊密に統合しているように見えるからです。
を使用しております バックミンスター. 。これはビルドとアセンブリのフレームワークであり、依存関係の解決、さまざまなリポジトリからの取得、製品のビルドとパッケージ化を処理します。
これは Eclipse Tools プロジェクトです。PDE とうまく統合されます。
これは、RCP の構築に使用するすべてのメタデータが、バックミンスターの解決と構築に役立つことを意味します。たとえば、feature.xml と Manifest.MF、.product の Require-Bundle ヘッダーです。
現在、各バンドルにはビルド スクリプトがありません。現在、製品ごとに 1 つのビルドが存在します。Buckminster は依存関係グラフを慎重に実行します。
既存のクルーズ コントロール/アント システムをそれと連携させるには少し手間がかかりましたが、彼ら (バックミンスター チーム) はプロジェクト自体をホストするためにハドソンを使い始めました。ビルドセットアップもダウンロードできると思います。
比較的初期の作品であるにもかかわらず、私たちはこの作品に本当に感銘を受けています。
私たちも調べました パックスコンストラクト しかし、Maven は使いたくありませんでした。
こちらも現在検討中です Spring DM テスト フレームワーク 単体テストの取り組みを強化します。
PDE ヘッドレス ビルド。これは Eclipse によって詳しく文書化されています。Eclipse プラグインを構築していて、コマンド ライン経由で実行したい場合は、Eclipse PDE ヘッドレス ビルドが最適です。
どこで問題が発生しているのか詳しく説明していただけますか?OSGiバンドルの依存関係について言及しています。これは実行中ですか?それともコンパイル時でしょうか?最初のケースでは、宣言型サービスを検討する必要があります (OSGi 仕様を参照)。
ハドソンと組み合わせて使用します プラグインビルダー Eclipse ベースの OSGi バンドル/プラグインを構築します。これは、プラグインを構築するための Eclipse の標準 PDE プロセスに基づいて構築されています。これは、コンパイラとして Eclipse を使用することを意味します。
Maven にはインターネット接続は必要ありません。念のため、-o スイッチを使用してください。
私はMaven 3.0.2を使用しています
mvn 生成:アーキタイプ
select 252 - osgi-archetype
mvn idea:idea
見る http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html
依存関係をバンドルに追加するには、pom.xml でこの短い例を使用します。
<Export-Package>org.foo.myproject.api</Export-Package>
または
<Import-Package>org.foo.myproject.api</Import-Package>