Java Equinox:通过捆绑包正确导出和导入的类,仍然得到ClassNotFoundException

Java Equinox:通过捆绑包正确导出和导入的类,仍然得到ClassNotFoundException,java,osgi,classloader,equinox,classnotfoundexception,Java,Osgi,Classloader,Equinox,Classnotfoundexception,在OSGi的开发过程中,我遇到了以下障碍。负责持久性的一组bundle使用另一个(Springsource EBR配置的)bundle提供的com.mysql.jdbc.Driver类。在另一个捆绑包中,我正在配置Quartz调度程序库,以将数据库用作作业存储。这也是使用MySQL驱动程序完成的。然而,在运行时,我得到一个ClassNotFoundException。这很奇怪,因为持久性仍然正常工作。更奇怪的是,当我尝试使用class.forName(“com.mysql.jdbc.Driver

在OSGi的开发过程中,我遇到了以下障碍。负责持久性的一组bundle使用另一个(Springsource EBR配置的)bundle提供的
com.mysql.jdbc.Driver
类。在另一个捆绑包中,我正在配置Quartz调度程序库,以将数据库用作作业存储。这也是使用MySQL驱动程序完成的。然而,在运行时,我得到一个
ClassNotFoundException
。这很奇怪,因为持久性仍然正常工作。更奇怪的是,当我尝试使用
class.forName(“com.mysql.jdbc.Driver”)
手动加载该类时,它被正确加载,这意味着该类确实可以加载

不管巧合与否,流口水也会发生同样的情况。。。我将一些最新的Drools JAR重新打包为OSGi包,部署它们,再次运行时会弹出
ClassNotFoundException
。在这两种情况下,所有供应商捆绑包都会添加到清单中所需的捆绑包中


这个奇怪的问题有什么意义吗?我很高兴听到这个消息

这似乎是Equinox中类加载的一个问题。我尝试使用
DynamicImport包
eclipsebuddypolicy
头来修复这个问题,但没有太大成功。最终,我自己将最新版本的Quartz重新打包为一个包,并在包中添加了MySql jar,从而解决了这个问题。这不是最漂亮或最优雅的解决方案,但它现在必须这样做。如果有人能告诉我更多关于类加载的信息,请随时回复

您可以/应该使用equinox控制台中的“headers”命令验证捆绑包是否具有正确的
Export-Package
Import-Package
头。@Progman:谢谢您的回复。问题似乎不是任何不正确的导入或导出语句,而是类加载本身,cfr。我的回答。