0

一部のバンドルでライブラリを利用できるようにする必要があります。このライブラリはRMIを使用するため、動作するには(少なくとも私が知る限り)システムクラスローダーを使用する必要があります(ライブラリを「osgi-fy」しようとしたため、実行時にclasscastexceptionsが発生しました)。したがって、私が行ったことは、そのライブラリを使用するバンドルから依存関係を削除し、プロパティjars.extra.classpath(eclipseプロジェクトのbuild.properties内)に含まれているライブラリを使用して依存関係をコンパイルすることでした。

それから私は追加しました

org.osgi.framework.bootdelegation=com.blipsystems.*

felix構成ファイルで、次のコマンドラインを使用してfelixコンテナを起動します。

java -classpath lib/blipnetapi.jar -jar bin/felix.jar

..これにより、blipnetapi.jarライブラリのクラスに対してNoClassDefFoundExceptionがスローされました。

エラー:ファイルの開始中にエラーが発生しました:/home/frza/felix/load/BlipnetApiOsgiService_1.0.0.1.jar(org.osgi.framework.BundleException:バンドルBlipnetApiOsgiService [30]のアクティベーター開始エラー。)
java.lang.NoClassDefFoundError:com / blipsystems / blipnet / api / util / BlipNetSecurityManager
    java.lang.Class.getDeclaredConstructors0(ネイティブメソッド)で
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)で
    java.lang.Class.getConstructor0(Class.java:2699)で
    java.lang.Class.newInstance0(Class.java:326)で
    java.lang.Class.newInstance(Class.java:308)で
    org.apache.felix.framework.Felix.createBundleActivator(Felix.java:3525)で
    org.apache.felix.framework.Felix.activateBundle(Felix.java:1694)で
    org.apache.felix.framework.Felix.startBundle(Felix.java:1621)で
    org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1076)で
    org.apache.felix.framework.StartLevelImpl.run(StartLevelImpl.java:264)で
    java.lang.Thread.run(Thread.java:619)で
原因:java.lang.ClassNotFoundException:com.blipsystems.blipnet.api.util.BlipNetSecurityManager
    org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:726)で
    org.apache.felix.framework.ModuleImpl.access $ 100(ModuleImpl.java:60)で
    org.apache.felix.framework.ModuleImpl $ ModuleClassLoader.loadClass(ModuleImpl.java:1631)で
    java.lang.ClassLoader.loadClass(ClassLoader.java:251)で
    java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)で
    ...11もっと

だから私の質問は:私は何かが欠けていますか?私は何か悪いことをした?

4

1 に答える 1

0

問題はコマンドラインにあります。-jar オプションを指定すると、java は -classpath オプションを無視します。-jar でクラスパスを指定する必要がある場合は、開始する jar のマニフェストに指定する必要があります。ここでは、単純に両方の jar をクラスパスに配置し、メイン クラスを手動で指定します (正確な名前については、Felix jar 内を確認してください)。

于 2010-05-04T22:06:02.060 に答える