Eclipseで簡単なプラグインを作成しようとしています。アプリケーションを実行すると、ログファイルに次のエラーが表示されます。
org.osgi.framework.BundleException:バンドルorg.xyのアクティベーターorg.xyのアクティベーターが無効です。
このエラーについて何か考えがありますか?
Eclipseで簡単なプラグインを作成しようとしています。アプリケーションを実行すると、ログファイルに次のエラーが表示されます。
org.osgi.framework.BundleException:バンドルorg.xyのアクティベーターorg.xyのアクティベーターが無効です。
このエラーについて何か考えがありますか?
build.properties
セクションを確認してください
最終的なバイナリ結果に含まれるべきものが適切に指定されていない場合、機能しません。.classファイルがMANIFEST.MFがそれらがあると言っている場所にあることを確認してください。
EclipseZoneから、このエラーメッセージのもう1つの理由:
ログに次のようなメッセージが表示された場合
The activator org.example.FooActivator for bundle org.example.foo is invalid
、これは通常
ClassNotFoundException
、start()メソッドに到達する前に、最初にクラスをロードしようとしたことを意味します。
ペングルは追加します:
アクティベータークラスのコンストラクターで他のクラスから新しいオブジェクトを作成しようとすると、エラーが発生します。アクティベータープラグインでオブジェクトを作成することは合法ではありませんか?
基本的なアドバイス:初期化はコンストラクターではなく、start()
メソッドで行う方がよい場合があります。Activator
別のワークスペースからプラグインをインポートするときにも同じ問題に直面しました。基本的に、これはフレームワークがクラスのロード中に検索するバンドルクラスパスです。別のワークスペースにインポートする場合は、クラスパスを変更して、適切な場所、つまりクラスファイルが存在する場所を指すようにしてください。
クラスパスを変更した後、クリーンアップして再構築し、再実行してみてください。それはうまくいくはずです..うまくいけば..
OK、私はここでキャプテンが明白になるのは嫌いですが、私は以前にこの間違いを犯しました。これは、BundleActivatorを拡張するのを忘れた場合にも発生する可能性があります。
Eclipseワークスペースを新しいパスに移動した場合は、プラグインをビルドする前にプロジェクト->クリーンを使用する必要があります。そうしないと、この問題が発生します。
私はこの問題にしばらく時間を費やしました。最後に、ClassNotFoundExceptionsが私のコードと一致しておらず、間違った(古い)パッケージからのものであることに気付きました。デバッグ/エクスポートをいじっている他のプラグインがあるかどうかを確認しました。実際、自分のプラグインがありました。
したがって、これに直面していて、CNFEがコードと一致していない場合に試す簡単な修正は、次のとおりです。
これは、プラグインIDを変更して、Eclipseに新しいプラグインとして扱わせたことが原因である可能性があります。
イライラして行き詰まっている場合に確認するもう1つの良いサイト:http ://www.eclipsezone.com/eclipse/forums/t99010.html
私の場合、このメッセージ「Activator ..invalid」がありましたが、次の例外では、バンドルにClassNotFound例外があり、何も変更していませんでした。
Guu(解決策も投稿しました)は私のヒーローです、増加した後
Bundle-ManifestVersion: 2
に
Bundle-ManifestVersion: 3
すべてが機能します:)
同じ例外が発生しました。根本的な問題はClassCastExceptionでした。私のバンドルにはorg.osgi.core4.3が必要ですが、equinoxランチャーは4.2を使用します。
よろしくローランド
これは、別のバンドルのパッケージにちなんでバンドルに名前を付けた場合にも発生する可能性があります。
それで:
Bundle A
パッケージを含むものがある場合org.my.package.name.function
、bundle B
そして、あなたは名前で作成しますorg.my.package.name.function
、
エラーの原因を見つけました。アクティベータークラスのコンストラクターで他のクラスから新しいオブジェクトを作成しようとすると、エラーが発生します。プラグインのアクティベーターでオブジェクトを作成することは合法ではありませんか?
私の場合、この例外は、Eclipseカスタムクラスローダーが他のプラグインからすべての依存クラスを時間内に解決してロードできないためでした。私はEclipseの第一人者ではないので、おそらくそれは私のせいでした。
ただし、プラグインの遅延読み込みを無効にすることで修正されました。GUIのエディタの[概要]タブで、クラスの1つがロードされたときにこのプラグインをアクティブ化するチェックボックスをオフにします。または直接削除行MANIFEST.MF
MANIFEST.MF
Bundle-ActivationPolicy: lazy
もう1つの明らかなキャプテン:ソースファイルのパスを変更した場合(たとえば、src/からsrc/ main / java)、build.propertiesの更新を忘れた場合、コンパイルは常に成功しますが、プラグインは機能しません。
同じエラーが発生しました。私の場合は、パラメーターを使用して独自のコンストラクターを作成しました。しかし、私はデフォルトのコンストラクターを提供しませんでした。したがって、コンストラクターを削除し、start()メソッド内ですべて初期化した後、それは魅力のように機能しました。
私も同じエラーに遭遇しました。バンドルXXのアクティベーターXXは無効であり、ClassNotFoundExceptionです。plugins \ディレクトリを確認しましたが、必要なクラスが見つかりませんでした。
--必要なクラスを含むjarファイルがないため、対応するディレクトリのみがあります。たとえば、com.hh.jarはなく、com.hhディレクトリのみがあります。
したがって、com.hh.jarの作成には何か問題があるはずです。
com.hh.jarが他のプラグインを参照している場合は、それらもチェックしてください。
MANIFEST.MFを編集して問題を解決しました。プラグインマニフェストエディタで開き、[ランタイム]タブで、[エクスポートされたパッケージ]に必要なパッケージを追加します。「クラスパス」に必要なライブラリを追加し、「。」(現在のディレクトリ、重要)
プレーンなjarファイルを「バンドル化」するときにもこの問題に遭遇しました。一部の依存関係が解決されない場合、またはjarが使用しているバージョンよりも高いJAVAバージョンに依存している場合、上記の例外を除いて、アクティベーターは起動しません。これが問題であるかどうかをすばやく確認する方法は、bundle-classpath(マニフェストのランタイムタブ)からjarを削除し、アクティベーターが正しく実行されるかどうかを確認することです。