我正在尝试创建一个包装另一个jar的OSGi服务。我将jar添加到项目,类路径和二进制构建中。我在Activator中注册了该服务,但是当使用bundle调用该服务时,我在包装jar上获得了java.lang.NoClassDefFoundError。有谁知道我在这里做错了什么?
提前致谢。
答案 0 :(得分:2)
您是要导出使用者所需的软件包,以及实现所需的所有软件包。消费者需要导入将被引用的所有内容。
作为旁注,以这种方式创建bundle在Eclipse中不适用于开发(适用于运行时)。如果您尝试从另一个OSGi项目引用jar中的类或接口,IDE将无法解析任何内容,因为它无法“看到”jar中的文件。必须在bundle中扩展jar,以便可以看到所有内容(在IDE中)。 Eclipse基于导入和导出自动创建适当的类路径引用以用于构建目的。如果没有包中的jar文件,则必须显式维护此类路径。
答案 1 :(得分:1)
您的行为可能有多种原因。为了确保,我会检查以下内容:
假设您使用Eclipse检查是否在清单编辑器的“Build”选项卡中包含了jar,并在“Classpath”下的“Runtime”选项卡中指向了这个jar。
创建的包:它包含jar吗?它是否有指向jar的“Bundle-ClassPath”标头,例如:“Bundle-ClassPath:lib / myLibrary.jar,”。 (最后一个。需要包括来自bundle的根目录的类 - 你的激活器f.i。)
确保jar实际上包含所有必需的依赖项,或者通过包装包中的Import-Package标头表达它们。 Eclipse有一个“导入向导”就是这样。前面提到的bnd工具也是这样做的。希望有所帮助......
答案 2 :(得分:0)
你在清单中使用了Bundle-Classpath吗?为什么不将bnd用于现有的jar?