2016-07-26 8 views
0

開発中に、バンドル内の特定のファイルの内容を変更し、アプリケーションの変更されたファイル内容を再コンパイル/バンドルの再インストールなしに変更する必要があります。アプリケーションがそのコンテンツを必要とするたびに、ファイルはBundle.getEntry()によって読み取られます。バンドルリソースをbndtools/felix環境でオンザフライで変更する方法

Eclipse PDEとEquinoxを使用すると、Eclipse環境から起動されたOSGiフレームワークがプロジェクトフォルダをパッケージ化されていないバンドルとして扱うため、単純に終了します。プロジェクトフォルダ内のファイルの変更は、アプリケーションがリソースコンテンツを読み取るたびに反映されます。

正しく理解すれば、リソースの変更が検出されると、bndtoolsは常にバンドルを再パッケージ化します。しかし、何百ものリソースファイルを持つプロジェクトでは、時間がかかりすぎます。 Eclipse PDEと同様の動作が可能ですか?好ましくはApache Felixでは?このような機能が必要なのは、開発/デバッグ時のみで、IDEからアプリケーションを起動した場合のみです。本番環境ではリソースは決して変更されません。

具体的には、私たちのアプリケーションでは、いくつかのCSSにコンパイルされた多くのLESSファイルがあります。 CSSは、LESSファイルが変更された直後に生成されます。これはgulpとnode.jsによって実現されます。ページがリロードされたときにすぐに変更されたCSSファイルを(ほとんど)見る必要があります。 OSGi HTTPサービスを使用していないことに注意してください。

答えて

0

これは不可能です。

Bndtoolsのパッケージ化に時間がかかりすぎる場合は、バンドルが大きすぎることを示す可能性があります。さらにモジュール化してください。

+0

パッケージ化に要する時間が短くなるようにバンドルを並べ替えるとします。それでも - バンドルホットリプレースのオプションがあります - つまり、実行中のアプリケーションはバンドルを再インストールせずに変更されたファイルにアクセスしますか? – st33v3

+0

Bndtoolsの中で起動すると、これがデフォルトです。バンドルは変更するたびに最新の状態に更新されます。 –

0

バンドルのリソースを使って開発したアプリケーションがあり、うまくいきます。 (このモデルを使用しているOSGi enRouteを参照してください)バンドルがそれほど大きくない限り、サブ秒の時間で構築されます。したがって、コード/リソースを複数のモジュールで分割できるかどうかを確認することをお勧めします。小さいほど、速く構築されます。

これは本当に問題であり、これを少しでも辛抱強く試してみると、getEntryというコードを変更してファイルシステムを見ることもできます。開発モード(config admin経由で設定)では、そこからフェッチすることができます。

関連する問題