Java 带有嵌套JAR的RCP ClassNotFoundException

Java 带有嵌套JAR的RCP ClassNotFoundException,java,osgi,rcp,Java,Osgi,Rcp,我有一个具有以下设置的RCP应用程序: my.plugin.jar |-->META-INF |-----MANIFEST.MF |-->A1.jar |-->A2.jar |-->A_Dependencies.jar (Jar of jars) |----->X1.jar,X2.jar,...Xn.jar 当我运行它时,我会得到与嵌套jar(X1.jar、X2.jar等)相关的ClassNotFoundException 我的舱单包含(除其他外)以下条目: my

我有一个具有以下设置的RCP应用程序:

my.plugin.jar
|-->META-INF
|-----MANIFEST.MF
|-->A1.jar
|-->A2.jar
|-->A_Dependencies.jar (Jar of jars)
|----->X1.jar,X2.jar,...Xn.jar
当我运行它时,我会得到与嵌套jar(X1.jar、X2.jar等)相关的ClassNotFoundException

我的舱单包含(除其他外)以下条目:

my.plugin.jar
   Bundle-ClassPath: .,A1.jar,A2.jar,A_Dependencies.jar

A1.jar
   Bundle-ClassPath: .,A_Dependencies.jar

A2.jar
   Bundle-ClassPath: .,A1.jar

A_Dependencies.jar
    Bundle-ClassPath: X1.jar, X2.jar,...Xn.jar
    Export-Package: (All the appropriate packages)
如何正确设置清单以解决这些问题?示例错误如下所示:

Caused by: java.lang.ClassNotFoundException: some.package.some.classfile cannot be found by my.plugin
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:439)

嵌套在另一个包中的OSGi包被认为是普通的jar文件。它们的清单将不会被提取,因此包类路径将不起作用。如果要在一个捆绑包中部署所有JAR(为什么不单独部署所有捆绑包?),则需要将结构展平,以便所有依赖项JAR都直接位于捆绑包之下,并添加到清单的捆绑包类路径中:

my.plugin.jar
   Bundle-ClassPath: .,A1.jar,A2.jar,X1.jar,...,Xn.jar
从错误消息中,似乎您正在运行Equinox。我更熟悉Felix和,它可以配置为并将它们添加到类路径中。插件创建的捆绑包没有绑定到Felix,因此您可以查看它,而不是手动编写捆绑包清单