我有一个项目,我正在尝试转换为OSGi。然而,这个项目是使用Guice作为其依赖注入管理器构建的。这是一个由Guice自始至终相互交织的大型项目。Guice在转换过程中给了我很多建议。具体来说,它已经为我提供了一个用于com.google.inject.internal.cglib.reflect.FastClass.的NoClassDefFoundError我已经确保没有任何东西是包私有的,并且我还下载并使用了guice-2.0-customloader.jar。不过,还是无济于事。
走这条路的人有什么建议吗?值得一提的是,我使用peaberry从OSGi环境(针对插件类型的体系结构)获得动态服务,稍后我将在程序中使用这些服务。
非常感谢,史蒂夫
发布于 2009-11-02 00:03:16
很难说到底是什么问题,在OSGi中,类加载器问题可能是非常特定的情况,并且很难调试。
如果guice确实是您的应用程序的核心,那么将其作为System Bundle的片段包可能是有意义的。系统包是所有包的类加载器树中的根节点。如果这个包中存在类,那么它们将在任何地方都可以访问。这是我用来成功地将Swing (物质、合金、Jide)包装为OSGi包的技术。它们必须在根级别,因为我的所有包都使用Swing (特别是Swing类加载器)。
您需要检查用于创建片段包并使该片段包成为框架扩展片段的OSGi规范。我只能使用Eclipse的Equinox运行时做到这一点。在我编写大多数支持类的时候,Apache Felix还不支持框架扩展片段。现在可能已经改变了。我对框架(knopplefish,spring-dm)一无所知
发布于 2009-11-12 19:23:20
只需使用Peaberry即可。它提供了在OSGi中使用Guice所需的所有支持。没有必要从头开始重塑一切!
发布于 2009-11-01 23:51:19
我假设你在package-private上的评论与Guice and bridging class loaders上的这个页面有关?
有一个可能与您的问题相关的错误报告/修补程序:http://code.google.com/p/google-guice/issues/detail?id=343
您是否尝试过将Guice和cglib添加到标准类路径并为其执行引导委派?这将证明/反驳您的问题与上面的bug报告中提到的问题是相同的。
https://stackoverflow.com/questions/1649841
复制相似问题