1

javassistのHotSwap関数を使用していますが、クラスパスにtools.jarが必要なので-cp tools.jar、OSGiアプリケーションを起動するときに追加しました。しかし、私new HotSwap()がバンドルの1つのコードにいるとき、

 java.lang.NoClassDefFoundError: com.sun.jdi.Bootstrap

投げられました。com.sun.jdi.Bootstrapはtools.jarにあり、クラスパスにすでに追加しています。また、機能しない場合は次のコードが機能しないため、機能することを確認しました。

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

HotSwapperのクラスローダーはクラスをロードできませんcom.sun.jdi.Bootstrapか?それでは、なぜそれが私のEclipse環境で正しく機能するのですか?(ビルドパスのライブラリにtools.jarを追加しました)

NoClassDefFoundErrorの理由については、手がかりをいただければ幸いです。

4

2 に答える 2

3

システムバンドルがこのパッケージをエクスポートすることを確認する必要があります。たとえば、Felixでは、ファイルjre.propertiesは、システムバンドルによってエクスポートされるパッケージを定義します。そこにパッケージcom.sun.jdiを追加すると、機能するはずです。

eclipseでは、これはconfig.iniで行われます。org.osgi.framework.system.packages.extra =を使用して、エクスポートする追加のパッケージを定義できます。boodelegation = *は不要なパッケージもエクスポートする可能性があるため、使用したくありません。見る:

http://www.eclipse.org/forums/index.php/m/734358/

http://wiki.eclipse.org/Equinox_Boot_Delegation

于 2012-06-30T16:02:35.040 に答える
0

Equinoxでは、Boot Delegationを*に設定して、bootclass内のすべてのクラスにアクセスできるようにすることができます。詳細については、このwikiを参照してください。3.2では、でしosgi.compatibility.bootdelegation=trueconfig.ini

于 2012-07-01T08:32:55.510 に答える