バンドルにサードパーティの jar を含めようとしています。私はこのチュートリアルhttp://www.aqute.biz/Blog/2007-02-19に従っていますが、私のアクティベーターでは、その外部 jar からクラスを参照しようとしているときに ClasNotFoundException が発生します。
私のバンドルjarディレクトリ構造:
-\MyBundle
-\plugin.xml
-\META-INF
-\MANIFEST.MF
-\org
-\mybundle
-\Activator.class
-\3rdParty.jar
MANIFEST.MF は次のようになります。
...
Bundle-ClassPath: .,
3rdParty.jar
...
これは、Eclipse 3.5.1 RCP アプリケーションの一部です。
エラーメッセージ:
java.lang.ClassNotFoundException: 3rd.party.proxy.ConfiguratorProxy
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at my.program.eclipse.core.ProcessEditorUploaderActivator.start(ProcessEditorUploaderActivator.java:111)
しかし、 this.getClass().getResource("/3rdParty.jar") を呼び出すと、機能します。
編集:問題が解決しました。RCP アプリから org.eclipse.core.runtime、org.eclipse.equinox.app、および org.eclipse.osgi ディレクトリを削除する必要がありました。バンドル クラスパスに関する情報がキャッシュされました。