Java 在捆绑包中包括第三方JAR

Java 在捆绑包中包括第三方JAR,java,osgi,classloader,Java,Osgi,Classloader,我正在尝试将第三方jar包含在我的包中。我遵循本教程,但在我的Activator中,我在尝试引用外部jar中的类时遇到了ClasNotFoundException My bundle jar目录结构: -\MyBundle -\plugin.xml -\META-INF -\MANIFEST.MF -\org -\mybundle -\Activator.class -\3rdParty.jar MANIFEST.MF如下所示: ... Bundle

我正在尝试将第三方jar包含在我的包中。我遵循本教程,但在我的Activator中,我在尝试引用外部jar中的类时遇到了ClasNotFoundException

My bundle jar目录结构:

-\MyBundle
  -\plugin.xml
  -\META-INF
    -\MANIFEST.MF
  -\org
    -\mybundle
      -\Activator.class
  -\3rdParty.jar
MANIFEST.MF如下所示:

...
Bundle-ClassPath: .,
 3rdParty.jar
...
它是Eclipse3.5.1RCP应用程序的一部分

错误消息:

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)
但是当我调用这个.getClass().getResource(“/3rdParty.jar”)时,它就可以工作了


编辑:问题已解决。我不得不从我的RCP应用程序中删除org.eclipse.core.runtime、org.eclipse.equinox.app和org.eclipse.osgi目录。已缓存有关bundles类路径的信息。

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

(使用清单编辑器时应自动执行此操作)

如果要导出插件并以其他方式运行,则需要build.properties文件,该文件应类似于:

source.. = src/ 
output.. = classes/ 
bin.includes = META-INF/,\
           .,\
           lib/thirdparty.jar
一些需要检查的事项:

  • 您的3rdParty.jar真的在bundle jar中吗?用Winzip打开并检查

  • 你的Manifest.MF正确吗?尝试将Bundle类路径的所有条目放在一行上,没有新行: 捆绑包类路径:,3rdParty.jar

  • 您试图从何处访问这些类?内部jar的类将从MyBundle.jar的类中可见,但它们不会从框架中的其他bundle中可见,除非您在清单中导出包


3rdparty.jar
捆绑类路径中提到的jar之一吗?另外,您是否可以发布确切的消息(例如,缺少什么类,您希望它来自哪里?)是的,3rdparty.jar是Bundle ClassPath中提到的jar之一。我做了一个正确的选择。我正在将包导出到jar并加载到我的RCP应用程序。我的项目中有build.properties文件。忘了提一下,我正试图通过这个.getClass().forName(“3rd.party.proxy.ConfiguratorProxy”)访问外部类。1。是的,在里面。2.清单似乎是正确的。我已经尝试了数以百万计的配置。3.我正在尝试从Activator类中的start()方法访问外部类。我发现我可以访问另一个3rdParty2.jar的类,即使不直接在包类路径中指定它。但对于第一个罐子,它不起作用。