在bundle中包括第三方罐子



我正在尝试在我的捆绑包中包含第 3 方 jar。我 http://www.aqute.biz/Blog/2007-02-19 遵循本教程,但是在我的激活器中,我在尝试从该外部jar引用类时得到ClasNotFoundException。

我的捆绑罐目录结构:

-MyBundle
  -plugin.xml
  -META-INF
    -MANIFEST.MF
  -org
    -mybundle
      -Activator.class
  -3rdParty.jar

清单。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目录。有关捆绑包类路径的信息已高速缓存。

你是在从 Eclipse 运行它吗?如果是这样,您的第三方捆绑包也应列在您的 .classpath 文件中。你应该有一行,比如:

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

(使用清单编辑器时,这应该会自动发生)

如果要导出插件并以其他方式运行它,则需要一个 build.properties 文件,该文件应如下所示:

source.. = src/ 
output.. = classes/ 
bin.includes = META-INF/,
           .,
           lib/thirdparty.jar

要检查的一些事项:

  • 您的第三方.jar真的在捆绑罐内吗?使用Winzip打开并检查。

  • 您的 Manifest.MF 是否正确?尝试将 Bundle-ClassPath 的所有条目放在一行上,不要新行:捆绑类路径:.,第三方.jar

  • 您尝试从哪里访问这些课程?内部 jar 的类在 MyBundle.jar 的类中可见,但在框架中的其他捆绑包中不可见,除非您在清单中导出包!

最新更新