Java 将Guice与OSGi结合使用

Java 将Guice与OSGi结合使用,java,osgi,guice,Java,Osgi,Guice,我有一个项目,我正试图转换成OSGi。然而,这个项目是用Guice作为其依赖项注入管理器构建的。这是一个大项目,Guice贯穿始终。Guice在转换过程中给了我很多机会。具体来说,它给了我一个com.google.inject.internal.cglib.reflect.FastClass的NoClassDefFoundError。我已经确保没有任何包是私有的,我还下载并使用了guice-2.0-customloader.jar。但还是没有用 走这条路的人有什么建议吗?值得一提的是,我使用pe

我有一个项目,我正试图转换成OSGi。然而,这个项目是用Guice作为其依赖项注入管理器构建的。这是一个大项目,Guice贯穿始终。Guice在转换过程中给了我很多机会。具体来说,它给了我一个com.google.inject.internal.cglib.reflect.FastClass的NoClassDefFoundError。我已经确保没有任何包是私有的,我还下载并使用了guice-2.0-customloader.jar。但还是没有用

走这条路的人有什么建议吗?值得一提的是,我使用peaberry从OSGi环境(对于插件类型的架构)获取动态服务,然后在稍后的程序中使用这些服务

非常感谢,
Steve

我假设您对package private的评论与上的本页相关

有一个bug报告/补丁可能与您的问题有关:


您是否尝试过将Guice和cglib添加到标准类路径并为它们执行引导委派?这将证明/反驳您的问题与上述bug报告中提到的问题相同。

很难说到底是什么问题,类加载器问题在OSGi中可能非常具体,并且很难调试

如果guice真的是应用程序的核心,那么将其作为系统包的片段包可能是有意义的。系统包是所有包的类加载器树中的根节点。如果类存在于这个包中,那么它们在任何地方都可以访问。这是一种我成功地将Swing LAF(物质、合金、Jide)包装成OSGi束的技术。它们必须在根级别,因为我的所有包都使用Swing(特别是Swing类加载器)


您需要检查OSGi规范,以创建片段束并将该片段束作为框架扩展片段。我只能使用Eclipse的Equinox运行时来实现这一点。在我编写大多数支持类时,ApacheFelix还不支持框架扩展片段。现在可能已经改变了。我不知道框架(knopplefish,spring dm)

只需使用即可。它具有在OSGi中使用Guice所需的所有支持。不需要从头开始重新创造一切

您可以尝试我的最新补丁-刚刚附加了一个新补丁构建,它是最新的Guice trunk加上这一个补丁,因此人们可以尝试它并给出反馈


最新的补丁避免了许多此类CGLIB异常,而不强迫您公开类,并且在剩下的几个仍然需要公开类的地方(基本上是在显式使用方法拦截时)提供了更好的错误消息。

您使用的是哪个OSGi运行时?