17

Eclipseで簡単なプラグインを作成しようとしています。アプリケーションを実行すると、ログファイルに次のエラーが表示されます。

org.osgi.framework.BundleException:バンドルorg.xyのアクティベーターorg.xyのアクティベーターが無効です。

このエラーについて何か考えがありますか?

4

14 に答える 14

17

build.propertiesセクションを確認してください

最終的なバイナリ結果に含まれるべきものが適切に指定されていない場合、機能しません。.classファイルがMANIFEST.MFがそれらがあると言っている場所にあることを確認してください。


EclipseZoneから、このエラーメッセージのもう1つの理由:

ログに次のようなメッセージが表示された場合

 The activator org.example.FooActivator for bundle org.example.foo is invalid 

、これは通常ClassNotFoundException、start()メソッドに到達する前に、最初にクラスをロードしようとしたことを意味します。


ペングルは追加します:

アクティベータークラスのコンストラクターで他のクラスから新しいオブジェクトを作成しようとすると、エラーが発生します。アクティベータープラグインでオブジェクトを作成することは合法ではありませんか?

  • そのクラスがまだ「アクティブ化」されていない別のプラグインからのものである場合、それはあなたの問題である可能性があります。
  • そのクラスが見つからない場合は、プラグインアクティベーターも無効になります。

基本的なアドバイス:初期化はコンストラクターではなく、start()メソッドで行う方がよい場合があります。Activator

于 2009-08-20T11:18:53.650 に答える
3

別のワークスペースからプラグインをインポートするときにも同じ問題に直面しました。基本的に、これはフレームワークがクラ​​スのロード中に検索するバンドルクラスパスです。別のワークスペースにインポートする場合は、クラスパスを変更して、適切な場所、つまりクラスファイルが存在する場所を指すようにしてください。

クラスパスを変更した後、クリーンアップして再構築し、再実行してみてください。それはうまくいくはずです..うまくいけば..

于 2011-05-18T10:26:13.737 に答える
2

OK、私はここでキャプテンが明白になるのは嫌いですが、私は以前にこの間違いを犯しました。これは、BundleActivatorを拡張するのを忘れた場合にも発生する可能性があります。

于 2011-06-03T14:23:50.937 に答える
1

Eclipseワークスペースを新しいパスに移動した場合は、プラグインをビルドする前にプロジェクト->クリーンを使用する必要があります。そうしないと、この問題が発生します。

于 2011-04-21T03:09:28.050 に答える
1

私はこの問題にしばらく時間を費やしました。最後に、ClassNotFoundExceptionsが私のコードと一致しておらず、間違った(古い)パッケージからのものであることに気付きました。デバッグ/エクスポートをいじっている他のプラグインがあるかどうかを確認しました。実際、自分のプラグインがありました。

したがって、これに直面していて、CNFEがコードと一致していない場合に試す簡単な修正は、次のとおりです。

  • 「新しいソフトウェアのインストール」に移動します
  • 「インストール済み」をクリックします
  • パッケージ/プラグインのすべてのインスタンスを削除して再起動します

これは、プラグインIDを変更して、Eclipseに新しいプラグインとして扱わせたことが原因である可能性があります。

イライラして行き詰まっている場合に確認するもう1つの良いサイト:http ://www.eclipsezone.com/eclipse/forums/t99010.html

于 2012-03-26T08:52:23.797 に答える
1

私の場合、このメッセージ「Activator ..invalid」がありましたが、次の例外では、バンドルにClassNotFound例外があり、何も変更していませんでした。

Guu(解決策も投稿しました)は私のヒーローです、増加した後

Bundle-ManifestVersion: 2

Bundle-ManifestVersion: 3

すべてが機能します:)

于 2013-10-18T05:55:32.330 に答える
1

同じ例外が発生しました。根本的な問題はClassCastExceptionでした。私のバンドルにはorg.osgi.core4.3が必要ですが、equinoxランチャーは4.2を使用します。

よろしくローランド

于 2013-10-29T14:23:53.767 に答える
1

これは、別のバンドルのパッケージにちなんでバンドルに名前を付けた場合にも発生する可能性があります。

それで:

  • Bundle Aパッケージを含むものがある場合org.my.package.name.function
  • bundle Bそして、あなたは名前で作成しますorg.my.package.name.function
    • =>次に、システムはそこでアクティベーターを探しますが、何も見つかりません。
于 2016-10-31T20:32:12.493 に答える
0

エラーの原因を見つけました。アクティベータークラスのコンストラクターで他のクラスから新しいオブジェクトを作成しようとすると、エラーが発生します。プラグインのアクティベーターでオブジェクトを作成することは合法ではありませんか?

于 2009-08-28T06:44:37.523 に答える
0

私の場合、この例外は、Eclipseカスタムクラスローダーが他のプラグインからすべての依存クラスを時間内に解決してロードできないためでした。私はEclipseの第一人者ではないので、おそらくそれは私のせいでした。

ただし、プラグインの遅延読み込みを無効にすることで修正されました。GUIのエディタの[概要]タブで、クラスの1つがロードされたときにこのプラグインをアクティブ化するチェックボックスをオフにします。または直接削除行MANIFEST.MFMANIFEST.MF

Bundle-ActivationPolicy: lazy
于 2012-02-17T19:09:32.993 に答える
0

もう1つの明らかなキャプテン:ソースファイルのパスを変更した場合(たとえば、src/からsrc/ main / java)、build.propertiesの更新を忘れた場合、コンパイルは常に成功しますが、プラグインは機能しません。

于 2013-01-05T15:54:44.900 に答える
0

同じエラーが発生しました。私の場合は、パラメーターを使用して独自のコンストラクターを作成しました。しかし、私はデフォルトのコンストラクターを提供しませんでした。したがって、コンストラクターを削除し、start()メソッド内ですべて初期化した後、それは魅力のように機能しました。

于 2013-07-22T15:25:38.027 に答える
0

私も同じエラーに遭遇しました。バンドルXXのアクティベーターXXは無効であり、ClassNotFoundExceptionです。plugins \ディレクトリを確認しましたが、必要なクラスが見つかりませんでした。

--必要なクラスを含むjarファイルがないため、対応するディレクトリのみがあります。たとえば、com.hh.jarはなく、com.hhディレクトリのみがあります。

したがって、com.hh.jarの作成には何か問題があるはずです。

com.hh.jarが他のプラグインを参照している場合は、それらもチェックしてください。

MANIFEST.MFを編集して問題を解決しました。プラグインマニフェストエディタで開き、[ランタイム]タブで、[エクスポートされたパッケージ]に必要なパッケージを追加します。「クラスパス」に必要なライブラリを追加し、「。」(現在のディレクトリ、重要)

于 2014-11-21T01:13:28.773 に答える
0

プレーンなjarファイルを「バンドル化」するときにもこの問題に遭遇しました。一部の依存関係が解決されない場合、またはjarが使用しているバージョンよりも高いJAVAバージョンに依存している場合、上記の例外を除いて、アクティベーターは起動しません。これが問題であるかどうかをすばやく確認する方法は、bundle-classpath(マニフェストのランタイムタブ)からjarを削除し、アクティベーターが正しく実行されるかどうかを確認することです。

于 2016-05-02T09:58:09.417 に答える