【发布时间】:2011-08-17 01:00:29
【问题描述】:
我在 OSGi 中开发时遇到了以下障碍。一组负责持久性的包使用com.mysql.jdbc.Driver 类,由另一个(Springsource EBR 配置)包提供。在另一个包中,我将 Quartz 调度程序库配置为使用数据库作为作业存储。这也是使用 MySQL 驱动程序完成的。然而,在运行时,我得到一个ClassNotFoundException。这很奇怪,因为持久性仍然正常工作。更奇怪的是,当我尝试手动加载类时,使用Class.forName("com.mysql.jdbc.Driver") 加载正确,这意味着该类确实可以加载。
巧合与否,Drools 似乎也发生了同样的事情……我将一些最新的 Drools jar 重新打包为 OSGi 包,部署它们,当再次运行时,ClassNotFoundException 会弹出。在这两种情况下,所有供应商捆绑包都会添加到清单中的必需捆绑包中。
这个奇怪的问题有没有敲响警钟?我很高兴听到这个消息......
【问题讨论】:
-
您可以/应该使用 Equinox 控制台中的“headers”命令验证包是否具有正确的
Export-Package和Import-Package标头。 -
@Progman:谢谢你的回复。问题似乎不是任何不正确的导入或导出语句,而是类加载本身,cfr。我的回答。
标签: java osgi classloader equinox classnotfoundexception