バンドルのアクティベータが無効です
-
19-09-2019 - |
質問
Eclipseで簡単なプラグインを作成しようとしています。アプリケーションを実行すると、ログ ファイルに次のエラーが表示されます。
org.osgi.framework.BundleException :バンドルorg.xyactivator用のアクティベーターorg.xyのアクティベーターは無効です。
このエラーについて何か心当たりはありますか?
解決
あなたの build.properties
セクション
最終的なバイナリ結果に何が含まれるかを適切に指定しないと、機能しません。.class ファイルが MANIFEST.MF で指定された場所にあることを確認してください。
から エクリプスゾーン, 、このエラー メッセージのもう 1 つの理由は次のとおりです。
ログに次のようなメッセージが表示された場合
The activator org.example.FooActivator for bundle org.example.foo is invalid
, 、これは通常、
ClassNotFoundException
start() メソッドに到達する前に、最初からクラスをロードしようとします。
ペングル 追加:
アクティベーター クラスのコンストラクターで他のクラスから新しいオブジェクトを作成しようとすると、エラーが発生します。アクティベータープラグインでオブジェクトを作成することは合法ではありませんか?
- そのクラスがまだ「アクティブ化」されていない別のプラグインからのものである場合、それが問題である可能性があります。
- そのクラスが見つからない場合は、プラグイン アクティベーターも無効になります。
基本的なアドバイス:で初期化を行ったほうが良いかもしれません。 start()
方法 の Activator
コンストラクターではなく。
他のヒント
私も同じ問題に直面していました。基本的には、フレームワークは、クラスをロード中に探しバンドル・クラスパスです。あなたが別のワークスペースにインポートするとき、あなたはクラスファイルが存在している、すなわち適切な場所を指すようにクラスパスを変更してください。
クラスパスを変更した後きれいにしようとすると、再構築および再実行。それべきwork..hopefully ..
は、あなたがあなたのプラグインのビルド前にクリーンプロジェクト - >を使用する必要があります、またはあなたは、この問題を満たしています。
OK、私はここで明らかキャプテンであることを憎むが、私は前にこのミスを犯しました。あなたはBundleActivatorを拡張することを忘れたときにも発生することができます。
私はこの問題にしばらく時間を費やしました。最後に、ClassNotFoundExceptions が私のコードと一致しておらず、間違った (古い) パッケージから来ていることに気付きました。デバッグ/エクスポートを妨害する他のプラグインがないかどうかを確認したところ、実際に私自身のプラグインが存在しました。
したがって、この問題に直面していて、CNFE がコードと一致していない場合に試す簡単な修正は次のとおりです。
- 「新しいソフトウェアのインストール」に進みます。
- 「すでにインストールされています」をクリックします
- パッケージ/プラグインのすべてのインスタンスを削除して再起動します
おそらくこれは、プラグイン ID を変更し、Eclipse がそれを新しいプラグインとして扱うようにしたために発生したと考えられます。
イライラして行き詰まった場合は、次のサイトを参照してください。 http://www.eclipsezone.com/eclipse/forums/t99010.html
私の場合、このメッセージは、「アクティベーターは..invalid」が、次の例外に私は何かを変更didntのたバンドル内にClassNotFound例外がありましたありました..
グゥ(あまりにソリューションを投稿)の の
増加した後、私のヒーローですBundle-ManifestVersion: 2
タグに
Bundle-ManifestVersion: 3
すべての作品:)
私は同じ例外が発生しました。根本的な問題は、ClassCastExceptionが発生しました。春分ランチャーは4.2を使用しています一方、私のバンドルは4.3 org.osgi.core必要です。
よろしく ローランド
これは、別のバンドル内のパッケージにちなんでバンドルに名前を付けた場合にも発生する可能性があります。
それで:
- あなたが持っている場合
Bundle A
パッケージが含まれていますorg.my.package.name.function
, - そしてあなたが作成します
bundle B
名前付きorg.my.package.name.function
,- => その場合、システムはそこでアクティベーターを探しますが、何も見つからない可能性があります。
私は、エラーの理由を発見しました。私は、アクティベータクラスのコンストラクタで、他のクラスから新しいオブジェクトを作成しようとするとエラーが発生します。それはプラグインの活性化因子でオブジェクトを作成するために法的ではないですか?
私の場合、この例外があるため解決し、イン・タイムの他のプラグインからすべての依存クラスをロードするためにEclipseのカスタムクラスローダのできないことでした。私はので、多分それは私のせいだった超教祖のEclipseておりません。
しかし、それは、プラグインの遅延ロードを無効にすることで修正されました。そのクラスのいずれかがのロードされたときMANIFEST.MF
エディタ]のチェックマークをはずしのの概要のタブのGUIでは、このプラグインを有効にします。または直接MANIFEST.MF
で行を削除する
Bundle-ActivationPolicy: lazy
別のキャプテン明白:あなたは(例えばSRC / srcに/メイン/ Javaへの)ソースファイルのパスを変更するが、build.propertiesを更新するのを忘れた場合は、コンパイルは常に成功しますが、あなたのプラグインが動作しません
私は、私の場合、私はパラメータを使用して自分自身のコンストラクタを作成し、同じエラーが発生しました。しかし、私は、デフォルトコンストラクタを提供していませんでした。だから私のコンストラクタを削除し、start()メソッド内のすべてを初期化した後、それはシャルムのように働いています。
私も同じエラーに会いました。バンドルXXのためのアクチベーターXXは無効である、とのClassNotFoundException。 私は、ディレクトリ\プラグインを確認し、クラスが必要見つけることができませんでした。
- 必要なクラスを含む一切のjarファイルが存在しないので、唯一の対応するディレクトリがあります。 例えば、何com.hh.jarが、唯一com.hhディレクトリはありません。
だから、com.hh.jarの作成について何か問題がなければなりません。
com.hh.jar参照他のプラグイン場合は、、そして、また、それらをチェックします。
私はMANIFEST.MFを編集して問題を解決しました。 ランタイムタブでは、プラグイン・マニフェスト・エディタでそれを開き、「エクスポートパッケージ」に必要なパッケージを追加します。 そして「クラスパス」に、必要なライブラリを追加し、「」 (カレントディレクトリ、重要)
私もこのisue「バンドルizing」プレーンなJARファイルに実行しました。いくつかの依存関係が解決、またはjarはあなたが使用しているものよりも高いJAVAのバージョンに依存していない場合は、活性剤は、上記の例外を与えて、起動しません。これが問題であるかどうかを確認する簡単な方法は、バンドル・クラスパス(マニフェストの実行時のタブ)からのjarファイルを削除して、活性化剤は、正しく実行されるかどうかを確認することです。