0

バンドルにサードパーティの 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 ディレクトリを削除する必要がありました。バンドル クラスパスに関する情報がキャッシュされました。

4

2 に答える 2

0

確認事項:

  • 3rdParty.jar は本当にバンドル jar 内にありますか? Winzipで開いて確認。

  • あなたの Manifest.MF は正しいですか? Bundle-ClassPath: のすべてのエントリを 1 行に入れてみてください。新しい行は入れません: Bundle-ClassPath: .,3rdParty.jar

  • どこからクラスにアクセスしようとしていますか? 内部 jar のクラスは MyBundle.jar のクラスから見えますが、マニフェストでパッケージをエクスポートしない限り、フレームワーク内の他のバンドルからは見えません!

于 2012-06-04T08:48:54.727 に答える
0

Eclipseから実行していますか?その場合、サードパーティのバンドルも .classpath ファイルにリストされている必要があります。次のような行が必要です。

<classpathentry exported="true" kind="lib" path="lib/thirdparty.jar"/>

(これは、MANIFEST エディターを使用すると自動的に行われます)

プラグインをエクスポートして別の方法で実行する場合は、次のような build.properties ファイルが必要です。

source.. = src/ 
output.. = classes/ 
bin.includes = META-INF/,\
           .,\
           lib/thirdparty.jar
于 2012-06-02T06:59:07.903 に答える