0

古い OSGi プロジェクトを現在の Equinox バージョン (Kepler SR1) に移行しました。gogo コンソールを使用しているときに、gogo バンドルを開始レベル 1 で開始するときに問題が発生しました (これは、関連するすべてのフレームワーク バンドルで通常行うことです)。4 つのバンドルすべてがアクティブで実行中ですが、gogo コンソールが起動しません。help と入力すると、NullPointerException が発生します。解決策は、すべての gogo バンドルをデフォルトの開始レベルで開始することです。何か見逃していましたか、それともバンドル ライフサイクルの設計が悪いだけですか? バンドルは、機能するために開始レベルに依存するべきではありません。

マイク

4

2 に答える 2

0

例外の理由を見つけました:

古いスタイルの CommandProvider を使用しています。従来のコマンドのヘルプを出力するときに、equinox.console バンドルにバグがあるようです。クラス org.eclipse.equinox.console.commands.HelpCommand の legacyCommandProviders のセットには、(何らかの理由で) 例外につながる null エントリが含まれているようです。これは時々発生します。従来のコマンドを変換する必要があるようです... :-(

于 2014-01-06T08:31:18.763 に答える
0

Equinox を実行し、すべてのバンドルを開始レベル 1 で開始することができます。次の開始構成を使用すると、期待どおりに機能します。

<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -clean"/>
<stringAttribute key="target_bundles" value="org.apache.felix.gogo.command@1:true,org.apache.felix.gogo.runtime@1:true,org.apache.felix.gogo.shell@1:true,org.eclipse.equinox.console@1:true,org.eclipse.osgi@-1:true"/>

Eclipse は製品の起動時に多くのものをキャッシュすることに注意してください。また、起動の間にワークスペースが削除されないため、エラーが忍び寄ることがよくあります。これにより、上記のようなエラーが発生することがあります。関連付けられたフォルダーも消去する起動構成を削除してから、後で再度追加することができます。

これが期待どおりに機能することを確認するには、OSGi フレームワークとして新しいランタイム構成を作成し、開始レベル 1 および自動開始 true で 4 つのバンドルを追加します。

org.eclipse.osgiバンドルはフレームワーク バンドルであり、デフォルトを示すために -1 の開始レベルを持つ必要があることに注意してください。おそらくそれがあなたが見ている問題です。

于 2014-01-04T12:27:33.423 に答える