0

我正在尝试在我的捆绑包中包含 3rd 方 jar。我正在关注本教程http://www.aqute.biz/Blog/2007-02-19,但是在我的 Activator 中,我在尝试从该外部 jar 中引用一个类时得到 ClasNotFoundException 。

我的 bundle 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 真的在 bundle jar 里面吗?用Winzip打开并检查。

  • 您的 Manifest.MF 是否正确?尝试将 Bundle-ClassPath: 的所有条目放在一行上,没有新行: 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 回答