Equinox:由bundle正确导出和导入的类,仍然获得ClassNotFoundException

时间:2011-05-02 14:39:35

标签: java osgi classloader equinox classnotfoundexception

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

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

这个奇怪的问题会不会响铃?我很高兴听到它......

1 个答案:

答案 0 :(得分:2)

这似乎是Equinox中类加载的问题。我尝试使用DynamicImport-PackageEclipse-BuddyPolicy标头修复此问题,但没有取得多大成功。最后我通过自己重新打包最新版本的Quartz作为捆绑包修复了这个问题,在捆绑包中添加了MySql jar。它不是最漂亮或最优雅的解决方案,但它现在必须要做。如果有人能告诉我更多有关课程加载的信息,请随时回复!