サードパーティのOSGiコンテナ用のプラグインを書いています。プラグインには、次のようなコードがあります。
リソースr=factory.getInstance()。getResource( "test"); 文字列s=r.getList()[0];
2行目で次のように失敗します。
原因:java.lang.reflect.InvocationTargetException sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)で sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)で java.lang.reflect.Method.invoke(Method.java:597)で org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:206)で ...34もっと 原因:java.lang.NoClassDefFoundError:com / thirdparty / list user1.SampleCode.main(SampleCode.java:20)で ...39もっと 原因:java.lang.ClassNotFoundException:com.thirdparty.list org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:489)で org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:405)で org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:393)で org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)で java.lang.ClassLoader.loadClass(ClassLoader.java:247)で ...42もっと
次に、不足しているクラスをプラグインJARに含めようとすると、別のエラーが発生します。
原因:java.lang.reflect.InvocationTargetException sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)で sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)で java.lang.reflect.Method.invoke(Method.java:597)で org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:206)で ...34もっと 原因:java.lang.LinkageError:ローダー制約違反:ローダー(org / eclipse / osgi / internal / baseadaptor / DefaultClassLoaderのインスタンス)が以前に「com / thirdparty/list」という名前の別のタイプのロードを開始しました java.lang.ClassLoader.defineClass1(ネイティブメソッド)で java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)で java.lang.ClassLoader.defineClass(ClassLoader.java:615)で org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:183)で org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:576)で org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:546)で org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:477)で org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:465)で org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:445)で org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:211)で org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:376)で org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:452)で org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:405)で org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:393)で org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)で java.lang.ClassLoader.loadClass(ClassLoader.java:247)で user1.SampleCode.main(SampleCode.java:20)で ...39もっと
何が起こっている?クラスローダーは私が必要とするクラスを知っているようで、私にそれを使用させたり、私自身のコピーを含めたりすることはできません。