15

私は、karaf の上で機能として実行される多くのバンドルで構成される製品に取り組んでいます。通常、開発者は一度に 1 つのバンドルに取り組みます。私たちの通常の開発は、次のようなものです。コードを書き、コンパイルし、バンドルを展開フォルダーにコピーし、テストします。また、hotdeploy は、サーバーの再起動や機能のアンインストール/再インストールなしで機能としてインストールされた特定のバンドルをオーバーライドすることを拒否するだけであるため、サイクルが長くなる場合があることもわかりました。

私の質問は次のとおりです。コミュニティの誰かがより良い方法を持っていますか? 私たちのやり方は機能していますが、かなり遅くて非効率的だと感じています。誰かがもっと良いものを思いついたに違いありません!

編集:私の質問ではかなり不明確だったことに気付きました...私たちはKarafの下でEquinoxを使用しています。Eclipse と Maven も使用していますが、Maven の使用が適切かどうかはわかりません。

4

4 に答える 4

9

dev:watchコマンドが必要なようです。ドキュメントから:

watch コマンドを使用すると、開発時に役立ちます。監視する一連の URL を構成できます。指定された URL に一致するすべてのバンドルの場所が自動的に更新されます。これにより、バンドルを手動で更新したり、必要に応じてバンドルをシステム フォルダーにコピーしたりする必要がなくなります。実際に自動的に更新されるのは Maven ベースの URL と Maven スナップショットのみであることに注意してください。

dev:ウォッチ *

実際には、URL に「-SNAPSHOT」が含まれる mvn:* に一致する場所を持つすべてのバンドルを監視します。

Karaf シェルから「dev:watch --help」を実行すると、使用可能なフラグと引数が一覧表示されます。

似たようなものはPAXプラグインです

Eclipse 用の m2 maven プラグインがあれば、これらのいずれもうまく機能します。

更新: 私の会社では、可能な限り TDD になるよう努めているため、Karaf を明示的に開始せずに多くの開発が行われています。単体テストの通常の組み合わせでは、 Pax Examも使用しています。これは、Eclipse 内から実行した場合でも非常に優れています =)

これにより、Karaf は Equinox/Felix/Concierge で実行されるため、Karaf の仕様に縛られすぎないようにすることができます (そのため、JAAS 認証など、私たちが依存するさまざまな Karaf の仕様を模倣しています)。他の多くのクールなツール/機能に加えて、Karaf 機能をプロビジョニングでき、TinyBundles を使用してその場でバンドルを作成することもできます (これもモック/スタブに役立ちます)。

Pax Examは、JUnit @Runner を提供することで JUnit フレームワークにフックします。最新バージョン (2) ははるかに高速で、DSL ベースの API を備えているため、テストは非常に簡潔で読みやすいものになっています。

Pax Examを使用することで、テスト範囲が広くなり、開発時間が短縮されます。テストがあまり実用的でない場合や、テストで表面化しないバグを探している場合は、dev:watch コマンドが非常に役立ちます。

要約すれば; IMO は間違いなくテストを使用して開発を推進する必要があります ( Pax Examは既存のビルドに適切に挿入され、慣れると開発がより迅速に行われるようになります)。dev:watchコマンドをすぐに使い始めることができます。これにより、現在の状況が確実にスピードアップします。

更新 2:別の質問に答える際に、ComponentFactory をテストする Pax-Exam の例を追加しました。テスト駆動開発は、今日の開発者が利用できる最も効率的なワークフローです。質問へのリンク: osgi: ServiceFactories を使用していますか? ソースコードへのリンク: http://dl.dropbox.com/u/2465717/net.earcam.example.servicecomponent_2011-08-16_15-52.tgz

于 2011-08-01T08:10:38.977 に答える
3

EclipseでEquinoxを使用すると、優れた結果が得られました。ホットコード置換でも適切に機能します。確かに、ターゲットプラットフォームは小さく、独自のバンドルは約50バンドルしかありませんが、ワークフローは次のようになります。

まず、すべてのサードパーティバンドルとEclipseバンドルを含むターゲットプラットフォームがあります。Eclipseがそれらのダウンロードと管理を行います。次に、ワークスペースには、3〜4つのワーキングセットにグループ化されたプロジェクトのすべてのバンドルが含まれます。保存時に通常どおりコンパイルが行われ、GWTを再コンパイルする必要がある場合もありますが、デプロイを行う必要がないため、変更はすぐに取得されます。実行中のEquinoxシステムは、解凍されたプロジェクトフォルダーをバンドルとして使用します。Eclipse内からこれを実行すると、ホットコード置換、オンザフライで変更されるテンプレートファイルが提供され、MANIFEST.MF / plugin.xmlの変更のみがバンドルを更新する必要があります。それでも、通常は、入力するよりもフレームワークを再起動する方が高速です。コンソール。

于 2011-07-30T00:44:09.700 に答える
3

Eclipse を使用している場合は、Eclipse Libra が役立つ場合があります。Libra は、WST を使用する他のサーバーと同様に、Eclipse 内で Felix、Equinox、および Knopflerfish を起動できます。彼らはそれを使用する方法をいくつかの youtube ビデオを持っています。

また、役立つツールをいくつか作成しました。

  • フィルター (osgitest=junit4) に一致する OSGI サービスをピックアップする osgi バンドル。これにより、Junit クラスを作成する必要はありませんが、事前に構成されたオブジェクトを提供できます (たとえば、OSGI ブループリントを使用)。JUnit は、サービスが実装するインターフェースで提供されるアノテーションに基づいて実行されます。
  • 次の有用な目標を持つ Maven プラグイン
    • OSGI コンテナーを開始し、すべての依存関係 (もちろん OSGI バンドル) を含むバンドル Maven プロジェクトをデプロイします。OSGI コンテナーの開始は PAX Exam の助けを借りて行われますが、JUnit テストは私が書いた OSGI バンドル (あなたが提供する OSGI サービスを実行する) の助けを借りて開始されます。
    • プロジェクトのすべての依存関係へのショートカットを含むフォルダーを作成します (フォルダーの maven リポジトリーまたはターゲット ディレクトリにあります)。

プロジェクトがサーバー (Eclipse Libra) にデプロイされている場合、X がバンドルの ID である X を更新するだけで、すべてが迅速に更新されます。クラスまたはpom.xmlを保存するとすぐに更新されるターゲットクラスフォルダーを指しているため、LibraでEquinoxを実行する場合、サーバーに公開されたプロジェクトを再コンパイルする必要はありません。

プロジェクトをサーバーに公開せず、ショートカット フォルダーを指すコンテナーにバンドルとして追加する場合は、mvn install の実行後に OSGi コンソールで更新コマンドを実行することもできます (サーバーを再起動する必要はありません)。

詳細なガイドは、http://cookbook.everit.org/で入手できます。

上記の次の方法を使用すると、テストを TDD テストとして記述し、CI サーバーで maven コンパイルの一部として実行することができます。

これらのツールが私と同じように役立つことを願っています。

于 2012-04-24T22:55:47.837 に答える
2

Karaf の下のプラットフォーム (Felix または Equinox) によって異なります。

春分

Eclipse は、選択したバンドルで Equinox を起動するための優れた (またはほとんど優れた) サポートを備えています。準備するものは以下の2点です。

  1. プラグイン プロジェクトとしてワークスペースで利用可能な、開発中のバンドル
  2. アプリケーションの残りのバンドルを含むターゲット プラットフォーム

このような設定により、バンドルやランタイムを簡単に変更し、必要に応じてランタイムを簡単に再起動できます。バンドルが SSH または FTP 経由でデプロイされるリモート システムで開発している場合、またはビルド後にランタイムでバンドルを自動的にコピーする機能を持つ Maven などの外部ビルド ツールを使用している場合は、Karaf がより適していると思います。

Equinox を使用している場合は、ランタイムがワークスペースからコードを直接実行するため、これによりさらに有利になります。

フェリックス

Felix は Eclipse からの起動をサポートしていないようです (ただし、この Jira issueで追跡されている作業があります)。通常の Java アプリケーションとして起動することもできますが、これはあまり便利ではありません。この場合、Maven を使用する方がはるかに優れた代替手段になります。PDE の他の機能を最大限に活用するように Eclipse をセットアップすることもできますが、外部からの起動のみが行われます。

概要

要約すると、Maven を使用していつでもすべてを自動化でき、Karaf はこの点で非常に役立ちます。Equinox を使用している場合、Eclipse は少し有利になります。ホットコード置換はOSGiをまったく考慮しないため、使用している方法に関係なくホットコード置換を行うことができるはずです(唯一のケースを除いて、バンドルをリロードして新しいクラスローダーが作成される場合を除く) )。

于 2011-07-30T18:04:36.187 に答える